Eu comecei a usar esse mesmo estilo de programação depois de ler o blog de Kfir Lavi postar "Defensive Bash Programming" . Ele dá algumas boas razões, mas pessoalmente considero estas as mais importantes:
-
os procedimentos se tornam descritivos: é muito mais fácil descobrir o que uma parte específica do código deve fazer. Em vez de parede de código, você vê "Oh, a função
find_log_errors
lê esse arquivo de log para erros". Compare com encontrar muitas linhas awk / grep / sed que usam deus sabe que tipo de regex no meio de um longo script - você não tem idéia do que está fazendo lá a menos que haja comentários. -
você pode depurar funções colocando em
set -x
eset +x
. Depois de saber que o resto do código funciona bem, você pode usar esse truque para se concentrar em depurar apenas essa função específica. Claro, você pode incluir partes do script, mas e se for uma parte longa? É mais fácil fazer algo assim:set -x parse_process_list set +x
-
imprimindo o uso com
cat <<- EOF . . . EOF
. Eu usei isso algumas vezes para tornar meu código muito mais profissional. Além disso, a funçãoparse_args()
withgetopts
é bastante conveniente. Novamente, isso ajuda na legibilidade, em vez de empurrar tudo para o script como uma parede gigante de texto. Também é conveniente reutilizá-los.
E, obviamente, isso é muito mais legível para alguém que conhece C ou Java, ou Vala, mas tem experiência bash limitada. No que diz respeito à eficiência, não há muito do que você pode fazer - o bash em si não é a linguagem mais eficiente e as pessoas preferem o perl e o python quando se trata de velocidade e eficiência. No entanto, você pode usar nice
de uma função:
nice -10 resource_hungry_function
Comparada a chamar bem em cada linha de código, isso diminui muito a digitação E pode ser convenientemente usado quando você quer que apenas uma parte do seu script seja executada com prioridade mais baixa.
A execução de funções em segundo plano, na minha opinião, também ajuda quando você deseja que várias instruções sejam executadas em segundo plano.
Alguns dos exemplos em que usei este estilo: