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

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

Re: [shell-script] Ignorar erros em um laço


From: Flavio Junior
Subject: Re: [shell-script] Ignorar erros em um laço
Date: Thu, 17 Jul 2008 15:37:22 -0300

Solução simples e marota:
utilizado=1
utilizado=`head -1 /var/lib/imap/quota/q/user.$i`
n_quota_bytes=$((0${NOVA_QUOTA}*1024))

viu o "0" ali ?
O teu erro ta no $((*1024))
pq se o arquivo na o existe, nao tem valo de $NOVA_QUOTA e ai acontece
issoa ai em cima..
Poe um zero, o resultado da operação vai ser zero e vai ser menor que
o utilizado.

--

Flavio do Carmo Junior aka waKKu



2008/7/17 César Vianna <address@hidden>:
> Exato. Segue o erro.
>
> $ bash -x ./script.sh
> ++ cat perfil0.txt
> + for i in '`cat perfil0.txt`'
> ++ head -1 /var/lib/imap/quota/q/user.a
> head: não foi possível abrir `/var/lib/imap/quota/q/user.a' para leitura:
> Arquivo ou diretório não encontrado
> + utilizado=
> ./script.sh: line 6: *1024: syntax error: operand expected (error token is
> "*1024")
>
> Acabei colocando mais um test. Aumentou o tempo de execução, mas funcionou.
>
> #!/bin/bash
> NOVA_QUOTA=30720
> for i in `cat perfil0.txt`
> do
> if [ -e /var/lib/imap/quota/q/user.$i ]
> then
> utilizado=`head -1 /var/lib/imap/quota/q/user.$i`
> n_quota_bytes=$(($NOVA_QUOTA*1024))
> if [ $n_quota_bytes -gt $utilizado ]
> then
> mv /var/lib/imap/quota/q/user.$i
> /var/lib/imap/quota/q/user.$i.old
> sed "2s/.*/$NOVA_QUOTA/"
> /var/lib/imap/quota/q/user.$i.old > /var/lib/imap/quota/q/user.$i;chown
> cyrus.mail /var/lib/imap/quota/q/user.$i
> else
> echo $i - $(($utilizado/1024/1024)) >>
> quotas-cheias.txt
> fi
> fi
> done
>
> 2008/7/17 MrBiTS <address@hidden>:
>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> | Realmente, tentei simplificar a pergunta, mas faltaram dados. Segue o
>> script
>> | completo.
>> |
>> | #!/bin/bash
>> | NOVA_QUOTA=30720
>> | for i in `cat perfil0.txt`
>> | do
>> | utilizado=`head -1 /var/lib/imap/quota/q/user.$i`
>> | n_quota_bytes=$(($NOVA_QUOTA*1024))
>> | if [ $n_quota_bytes -gt $utilizado ]
>> | then
>> | mv /var/lib/imap/quota/q/user.$i
>> | /var/lib/imap/quota/q/user.$i.old
>> | sed "2s/.*/$NOVA_QUOTA/"
>> /var/lib/imap/quota/q/user.$i.old >
>> | /var/lib/imap/quota/q/user.$i;chown cyrus.mail
>> /var/lib/imap/quota/q/user.$i
>> | else
>> | echo $i - $(($utilizado/1024/1024)) >> quotas-cheias.txt
>> | fi
>> | done
>>
>> Simplificar nem sempre é o melhor caminho, ainda mais numa descrição de
>> problemas.
>>
>> Vejamos. Você havia dito que, quando um arquivo ( $i ) não existe, o
>> laço é interrompido. Na verdade, nunca teremos um $i sozinho, mas sempre
>> um user.$i. Nesse caso, se user.$i não existe, a variável $utilizado não
>> ~ terá nenhum valor e a comparação $n_quota_bytes -gt $utilizado dará um
>> erro e, aí sim, quebrará o laço. Creio ser esse o seu problema. Falto a
>> mensagem de erro.
>>
>> Para certificar-se, rode o seu script com um bash -x ./script e
>> analise/poste o resultado.
>>
>> Do resto, não há nada que faça o laço ser quebrado. Os comandos mv e sed
>> não quebram laços quando falham, a não ser que você mande o script fazer
>> isso explicitamente.
>>
>> - --
>>
>> Um abraço
>>
>> .0. MrBiTs - address@hidden <mrbits%40linuxmasters.info>
>> ..0 GnuPG -
>>
>> http://keys.cardboard.net:11371/pks/lookup?op=get&search=0xAC37715A6DD1F186
>> 000 http://www.mrbits.com.br
>>
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.9 (Cygwin)
>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>>
>> iEYEARECAAYFAkh/hYIACgkQrDdxWm3R8YajywCfTxcoqP0QJA5CyRLIv4XcXThK
>> MLwAn0jKIBfbwE0/o8yJPQSK4Espe2R3
>> =LqRt
>> -----END PGP SIGNATURE-----
>>
>>
>
> --
> César Vianna
> -------------------
> "Talvez porque eu pense demais ou sonhe demais, o certo é que não distingo
> entre a realidade que existe e o sonho, que é a realidade que não existe."
> Fernando Pessoa
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 


reply via email to

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