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

[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-----


reply via email to

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