shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] script para leitura de arquivos


From: Welliton Sá
Subject: Re: [shell-script] script para leitura de arquivos
Date: Wed, 9 Mar 2005 14:22:48 -0300

tente adicionar [ -f
 /usr/local/jabber-1.4.2/spool/im.ceara.gov.br/$2.*.xml ]  &&  if [ `ls -1
/usr/local/jabber-1.4.2/spool/im.ceara.gov.br/$2.*.xml | wc -l` -gt 0 ]
assim ele só executa o seu comando se o arquivo existir, senão ele passa
para o proximo comando.

Atenciosamente,

Welliton Sá


>
> 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
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
>
> Links do Yahoo! Grupos
>
>
>
>
>
>
>
>
>
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]