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

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

Re: [shell-script] Shell clean code :)


From: Tiago Peczenyj
Subject: Re: [shell-script] Shell clean code :)
Date: Mon, 16 Jan 2012 16:57:23 -0200

Opa reinaldo

seguem minhas observações

1. vc poderia utilizar regexp para determinar se é vazio ou nao:

function isEmpty { [[ $1 =~ ^[[:space:]]*$ ]] ; return $? ; }

pacman2:~ peczenyj$ isEmpty "" && echo "vazio" || echo "nao vazio"
vazio
pacman2:~ peczenyj$ isEmpty " " && echo "vazio" || echo "nao vazio"
vazio
pacman2:~ peczenyj$ isEmpty $' \t' && echo "vazio" || echo "nao vazio"
vazio
pacman2:~ peczenyj$ isEmpty "palavras" && echo "vazio" || echo "nao vazio"
nao vazio

2. Vc pode testar diretamente o valor da $?

if isEmpty "$1"; then
  # stuff
fi

ou, numa sintaxe mais alternativa

isEmpty "$1" && {
  # stuff
}

3. a mesma coisa com mkdir

mkdir -p dir || { echo "impossivel criar diretorio; }

ou com if

if ! mkdir -p dir ; then
...
fi

4. a função

buildMd5AndShaFromJarXmlPom

poderia ser escrita assim:

find . -type f -name '*.jar' -or -name '*.pom' -or -name '*.xml' | xargs
-I{} echo "md5sum {}.md5" \; echo "sha1 {}.sha"

onde basta substituir os echos pelos comandos adequados.

agora fiquei na duvida do motivo pelo qual isto foi feito assim:

echo -n $(md5sum $line) | cut -c1-32 | tr -d '\n'

precisa desse echo -n ? o cut e o tr ok...

5. a função extractPomFromJar

poderia receber como entrada um find com as opções corretas ao inves do ls,
visto que rola um unzip seguido de umas verificações. alias o unzip possui
uma opção -q e -qq que praticamente nada é impresso na tela, dessa forma
não necessita fechar a saida padrão e erro.

6. a função requireCmd poderia apenas testar o resultado do comando which

pacman2:boost peczenyj$ which gcc
/usr/bin/gcc
pacman2:boost peczenyj$ echo $?
0
pacman2:boost peczenyj$ which gcca
pacman2:boost peczenyj$ echo $?
1

Alias se vc passar uma string vazia o which também acusará erro. O comando
which tem uma opção -s (silenciosa) para esse tipo de coisa.

O resto esta bom, apesar de notar a influência do java nesse script com as
funções em camelcase. não que isso seja ruim, apenas acho curioso. alias se
isto é um script para gerenciar repositorio maven que vantagem tu vê em
usar shell script ao inves de utilizar um script ant, por exemplo (alem de
ant ser feio por natureza com a estrutura de xml maluca dele)?

Eu notei uma coisa, entretanto. Vc acusa o erro mas realiza o exit comum.
Nesse caso eu sugiro

1. escreva a mensagem de erro na saida de erro (STDERR) através do
modificador >&2
2. execute exit com valor diferente de 0

Mas isso se fizer sentido para vc.

Abraços

Tiago

2012/1/16 Reinaldo de Carvalho <address@hidden>

> **
>
>
> Olá pessoal,
>
> fiz um script para atualizar meu repositório maven e acredito que
> sirva de exemplo de boas práticas para o uso de:
>
> - bash expansions
> - return em functions
> - while com < <(cmd)
> - if com condiçõe"s"
> - cat <<< e cat <<EOF
> - @shelldoc kkk =D
>
> http://reinaldoc.github.com/tools/repo.sh
>
> p/ visualizar no navegador:
>
>
> http://github.com/reinaldoc/reinaldoc.github.com/blob/gh-pages/tools/repo.sh
>
> Sugestões são bem vindas :)
>
> []s
>
> --
> Reinaldo de Carvalho
> http://korreio.sf.net
> http://python-cyrus.sf.net
>
> "While not fully understand a software, don't try to adapt this
> software to the way you work, but rather yourself to the way the
> software works" (myself)
>  
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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