[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]
- Shell clean code :), Reinaldo de Carvalho, 2012/01/16
- Re: [shell-script] Shell clean code :),
Tiago Peczenyj <=