[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] script para leitura de arquivos
From: |
Rodrigo Monteiro |
Subject: |
Re: [shell-script] script para leitura de arquivos |
Date: |
Wed, 9 Mar 2005 08:17:33 -0800 (PST) |
gustavo, muito obrigado pela sua ajuda. agora o meu
problema eh outro.
nessa linha abaixo acontece o seguinte erro:
if [ `ls -1
/usr/local/jabber-1.4.2/spool/im.ceara.gov.br/$2.*.xml
| wc -l` -gt 0 ]
quando para o parametro ($2) que passo existe o
arquivo (exemplo, $2=orgao01 e existe o arquivo
orgao01.usuario33.xml), ele funciona ok, como eu
quero, mas quando nao existe esse arquivo, ele da uma
mensagem de erro na tela dizendo que nao existe o
arquivo, quando ele executa esse 'ls' que esta dentro
no if. tentei colocar 2> /dev/null em alguns lugares
mas nao consegui. vc ou alguem tem uma ideia que possa
funcionar?
-----------
script.sh
-----------
if [ -e $1 ] ; then
ls /usr/local/jabber-1.4.2/spool/im.ceara.gov.br/ |
cut -d. -f1 | uniq -c | awk '{print $2 ": " $1 "
usuarios"}'
else
if [ $1 = "--help" ] ; then
echo "Uso: "
echo ' '"./script -o orgao: mostra a quantidade
de usuarios do orgao."
echo ' '"./script: mostra todos os orgaos com a
quantidade dos seus respectivos usuarios"
echo ' '"./script --help: mostra esta ajuda"
elif [ $1 = "-o" ] ; then
if [ `ls -1
/usr/local/jabber-1.4.2/spool/im.ceara.gov.br/$2.*.xml
| wc -l` -gt 0 ] ; then
echo "$2: `ls -1
/usr/local/jabber-1.4.2/spool/im.ceara.gov.br/$2.*.xml
| wc -l` usuarios"
else
echo "$2: nao existe este orgao"
fi
else
echo "$1: nao existe. digite script --help para
ajuda"
fi
fi
--- Gustavo Chaves <address@hidden> wrote:
> >>>>> On Tue, 8 Mar 2005 08:48:57 -0800 (PST),
> Rodrigo Monteiro <address@hidden> said:
>
> > #cria o arquivo usuarios_total com todos os
> orgaos do diretorio onde ficam os arquivos dos
> usuarios (funciona OK)
> > ls -1
> /usr/local/jabber-1.4.2/spool/im.ceara.gov.br/ | cut
> -f1 -d"."
>
>/usr/local/jabber-1.4.2/usr/rodrigo/usuarios_total.txt
> > #tira os orgoas repetidos (funciona OK)
> > sort -u
>
/usr/local/jabber-1.4.2/usr/rodrigo/usuarios_total.txt
> > /usr/local/jabber-1.4.2/usr/rodrigo/temp_usu.txt
> > #daqui pra baixo eh que da erro
> > #para ele ir da primeira ate a ultima linha do
> arquivo temp_usu.txt
> > tot=`wc -l
> /usr/local/jabber-1.4.2/usr/rodrigo/temp_usu.txt`
> > echo $tot >
> /usr/local/jabber-1.4.2/usr/rodrigo/total.txt
> > cut -f1 -d" "
> </usr/local/jabber-1.4.2/usr/rodrigo/total.txt
> >/usr/local/jabber-1.4.2/usr/rodrigo/total02.txt
> > total=`sed 1q
> /usr/local/jabber-1.4.2/usr/rodrigo/total02.txt`
> > for ((cont=1;total;cont++))
> > do
> > #colocar na variavel $pal o conteudo da
> linha numero $cont do arquivo temp_usu.txt
> > pal=`sed
>
-`$cont`q/usr/local/jabber-1.4.2/usr/rodrigo/temp_usu.txt`
>
> > # mostrar "orgao01: 130 usuarios"
> > echo "$pal: `ls -1
>
/usr/local/jabber-1.4.2/spool/im.ceara.gov.br/$pal.*.xml
> | wc -l` usuarios"
> > done
>
> Se consegui entender direito o seu script, eu creio
> que o seguinte
> deveria funcionar:
>
> cd /usr/local/jabber-1.4.2
> ls spool/im.ceara.gov.br | cut -f1 -d. | sort -u |
> while read pal; do
> n=`find spool/im.ceara.gov.br -maxdepth 1 -name
> "$pal.*.xml" | wc -l`
> echo "$pal: $n usuarios"
> done
>
> O primeiro 'cd' é só pra diminuir o tamanho das
> linhas seguintes. Se
> você precisa voltar ao diretório original e estiver
> usando uma shell
> que suporte os comandos pushd e popd, troque o cd
> por um 'pushd
> /usr/local/jabber-1.4.2' e, no final, execute um
> 'popd' pra voltar.
>
> O pipe que precede o while evita os vários arquivos
> temporários que
> você criou.
>
> O while substitui o for, evitando a necessidade de
> contar as linhas,
> evitando as várias chamadas ao sed e simplificando a
> lógica.
>
> Troquei o ls por um find porque se houverem muitos
> arquivos xml que
> casam com o glob "$pal.*.xml" a shell pode não
> conseguir expandi-los
> todos na linha de comando. Dá pra fazer isso com um
> ls no diretório e
> filtrando com grep, mas fica difícil garantir que a
> expressão regular
> passada pro grep vai ser correta para todos os
> casos.
>
> BTW, a opção -maxdepth é específica do find do GNU.
> Se o seu find não
> a suportar dá pra simular isso com a opção -prune,
> mas fica mais
> complicado.
>
> Por outro lado, eu não testei o script e pode não
> funcionar exatamente
> como você quer... caveat emptor.
>
> Gustavo.
>
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
- Re: [shell-script] script para leitura de arquivos,
Rodrigo Monteiro <=