[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Ignorar erros em um laço
From: |
César Vianna |
Subject: |
Re: [shell-script] Ignorar erros em um laço |
Date: |
Thu, 17 Jul 2008 15:24:15 -0300 |
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]
Re: [shell-script] Ignorar erros em um laço, Tiago Barcellos Peczenyj, 2008/07/17