Bash é a linha de comando defeito de grande parte das distribuições linux e uma poderosa linguagem de scripting. Ficam aqui algumas sugestões para tornar os seus scripts mais eficientes.
- Evite caminhos completos para comandos de sistema.
A bash já tem imensos comandos que podem ser utilizados sem a necessidade de utilizar comandos externos. Sempre que possivel utilize os mesmos de forma a não carregar o seu script.
# Evite Isto
/bin/echo “hello”
´# Utilize isto
echo “hello”
- Evite comandos externos para o Integer Math
A Bash tambem permite funções que podem ser utilizadas para o integer aritmético. Utilize apenas /usr/bin/bc se precisa de fazer um ponto fultuante aritmético. Os calculos básicos podem ser feitos com os seguintes builtins:
four=$(( 2 + 2 ))
four=$[ 2 + 2 ]
let four=”2 + 2″
- Evite utilizar o comando Cat
Ferramentas como o Grep, Awk e o Sed aceitam ficheiros como argumentos. Isto raramente é necessário para utilizar /bin/cat. Sendo assim torna-se desnecessário:
# Evite isto
cat /etc/hosts | grep localhost
Uma maneira mais eficiente é utilizar a capacidade nativa do Grep para ler ficheiros.
grep localhost /etc/hosts
- Evite fazer um pipe do Grep para o Awk
Se está a utilizar o Awk poderá eliminar a necessidade de utilizar o Grep. Tente não fazer pipe do Grep para o Awk.
# evite isto
grep error /var/log/messages | awk ‘{ print $4 }’
Em vez disso utilize a capacidade nativa do Awk para fazer um parse ao texto e salve assim um comando.
awk '/error/ { print $4 }' /var/log/messages
- Evite Fazer um pipe do Sed para o Sed
O Sed pode aceitar mais do que um comando em apenas uma execução. Evite então fazer pipes entre o sed.
# Evite isto
sed 's/hello/goodbye/g' filename | sed 's/monday/friday/g'
Em vez disso poderá utilizar o comando sed – e ou delimitar as expressões com uma semi-coluna (;)
sed -e ’s/hello/goodbye/g’ -e ’s/monday/friday/g’ filename
sed -e ’s/hello/goodbye/g; s/monday/friday/g’ filename
- Utilize Duplas chavetas para Compostos e Testes Regex
O [ ou o teste de comandos integrados pode ser utilizado para testar expressões, mas o operador integrado [[ adiciona um match de expressões regulares e comandos.
- Utilize Funções para tarefas que se repetem
Parta o seu script em partes e utilize funcões que repetem tarefas, as mesmas podem ser declaradas da seguinte forma:
function_name() {
do_something
return $?
}
Faça com que as funções possam ser utilizadas em mais do que uma shell.
#!/bin/bash
. /path/to/shared_functions
- Utilize arrays em vez de variáveis multiplas
Os arrays são bastante poderosos, logo evite utilizar variáveis desnecessárias.
# Evite isto
color1='Blue'
color2='Red'
echo $color1
echo $color2
Utilize um array para solucionar.
colors=('Blue' 'Red')
echo ${colors[0]}
echo ${colors[1]}
- Utilize o /bin/mktemp para criar ficheiros temporários
Precisa de ficheiros temporários? Temos a solução
tempfile=$(/bin/mktemp)
tempdir=$(/bin/mktemp -d)
- Utilize o /bin/egrep ou o /bin/sed para fazer uma comparação de padrões
Se acha que precisa de perl para fazer tudo verifique primeiro se o Sed ou o Egrep (grep -e) não lhe resolvem o problema.
# grep for localhost or 127.0.0.1 in /etc/hosts
egrep ‘localhost|127\.0\.0\.1′ /etc/hosts
# print pattern localhost.* in /etc/hosts
sed -n ’s/localhost.*/&/p’ /etc/hosts



















