10 Dicas para escrever um Script Eficiente

Fev 3, 2009 por Nuno Figueiredo    Sem Comentários    Categoria: Aplicações, Tutoriais, desenvolvimento




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

Partilhe com a Comunidade:
  • del.icio.us
  • Digg
  • PDF
  • Rec6
  • StumbleUpon
  • Twitter


Outros artigos de interesse:

Deixe-nos o seu comentário!

XHTML: Pode usar as seguintes tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>