[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Ajuda na criação de script
From: |
MrBiTS |
Subject: |
Re: [shell-script] Ajuda na criação de script |
Date: |
Sun, 08 Mar 2009 07:48:33 -0300 |
User-agent: |
Thunderbird 2.0.0.19 (X11/20090105) |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
> SPAM="sa-learn --spam "
> LOG="/var/log/spam.log"
>
> getDirs() {
> while read Line ; do
> Usuario=$(echo $Line | cut -d: -f1)
> HomeDir=$(echo $Line | cut -d: -f6)
>
> if [ "$HomeDir" != /dev/null ] ; then
> DIRSPAM="${HomeDir}/Maildir/.Spam"
> if [ -d $DIRSPAM ] ; then
> $SPAM $DIRSPAM >> $LOG
> fi
> fi
> done
> }
Dizer que "não funciona" ajuda bem pouco não é verdade ? Seria muito bom se
você ( e todos ) aprendesse a debugar seus scripts com
um simples bash -x ou pelo menos aprender a descrever um erro. O que "não
funciona" significa ? Ele não devolve nada ? Fica parado
esperando algo ? Dá um erro qualquer ?
Para sorte de vocês que não sabem descrever um erro corretamente, além de haver
aqui gurus de Unix e Shell, há também gurus indianos
com poderes adivinhatórios. No seu caso, consultei um o Cosmos ( um cara legal,
bebedor de cerveja e tudo ) e ele me disse que falta
informar ao while de qual arquivo Line vem.
Veja:
#!/bin/bash
OLD_IFS=$IFS
IFS=:
while read LINE ; do
set - $LINE
USUARIO=$1
HOMEDIR=$6
echo "$USUARIO - $HOMEDIR"
done < /etc/passwd
Esse cara simples vai me retornar algo assim:
root - /root
daemon - /usr/sbin
bin - /bin
sys - /dev
sync - /bin
games - /usr/games
man - /var/cache/man
Usamos coisas bem legais aí: IFS e set para definir o separador de campos ( no
caso do arquivo /etc/passwd, o : ) e para criar um
array de valores $1 a $6 ( a quantidade de campos que uma linha, ou registro,
do arquivo /etc/passwd, nosso banco de dados de
usuários tem ). Dissemos ao while de onde vem a variável LINE.
Na minha opinião, seu código ainda está mal escrito. Shell-script gosta de
váriaveis com letras maiúsculas ( basta ver todos os
scripts de inicialização de uma máquina Unix ) e sua identação está ruim. Veja
que a definição da sua variável Usuario está na mesma
coluna da definição do while. Mesmo que daqui alguns anos ninguém mais vá dar
manutenção nesse script. torço para que, quando você o
olhar, veja como isso atrapalha a leitura e entendimento. Achar seu proprio
programa antigo ruim significa que você evoluiu como
desenvolvedor.
Um abraço
.0. MrBiTs - address@hidden
..0 GnuPG -
http://keys.cardboard.net:11371/pks/lookup?op=get&search=0xAC37715A6DD1F186
000 http://www.mrbits.com.br
- --
Um abraço
.0. MrBiTs - address@hidden
..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 (GNU/Linux)
iEYEARECAAYFAkmzonsACgkQrDdxWm3R8YaaywCdFHCb6MCibEJ8FG7NtM7LaNm6
v/cAn35TBhrsuQRq4elCk2GNQyH4y9LM
=Fsbn
-----END PGP SIGNATURE-----