Bash Scripting
Tratamento de erros
set
O comando set -e
no Bash é usado para alterar o comportamento do shell em relação à execução de scripts. Quando você inclui set -e
no início de um script, ele faz com que o shell saia imediatamente se qualquer comando no script retornar um status de saída diferente de zero (ou seja, se algum comando falhar).
#!/bin/bash
set -e
O comando set -x
no Bash é uma ferramenta útil para depuração de scripts. Quando você ativa o set -x
, o Bash começa a exibir cada comando executado no script, junto com seus argumentos, antes de executá-los. Isso facilita a identificação de problemas, pois você pode ver exatamente o que está sendo executado e em que ordem.
#!/bin/bash
set -x
trap
O comando trap
no Bash é usado para capturar sinais e executar comandos ou funções específicas quando esses sinais são recebidos. Isso é útil para garantir que um script faça uma limpeza adequada ou execute ações específicas antes de ser interrompido, por exemplo, ao receber um sinal de interrupção (como SIGINT
, que é gerado quando você pressiona Ctrl+C
).
#!/bin/bash
trap 'echo "Error on line $LINENO"; exit 1' ERR
Para mais exemplos e explicação mais detalhada acesse a página.
Arrays associativos
Arrays associativos são pares chave-valor no Bash, disponíveis a partir do Bash 4. Elas permitem pesquisas e organização de dados eficientes.
declare -A servers
servers=( ["web"]="192.168.1.10" ["db"]="192.168.1.20" ["cache"]="192.168.1.30" )
echo "Web server IP: ${servers[web]}"
for key in "${!servers[@]}"; do
echo "$key -> ${servers[$key]}"
done
Heredocs para entrada multi-linha
email_body=$(cat <<EOF
Hello Team,
This is a reminder for the upcoming deployment at midnight.
Regards,
DevOps
EOF)
echo "$email_body" | mail -s "Deployment Reminder" team@example.com
Subshells
Um subshell é um processo filho no qual comandos podem ser executados sem afetar o shell pai.
Exemplo: Suponha que você queira alterar diretórios temporariamente e executar comandos:
(current_dir=$(pwd)
cd /tmp
echo "Now in $(pwd)"
)
echo "Back in $current_dir"
Named Pipes (FIFOs)
Pipes nomeados (ou FIFOs) são arquivos especiais que facilitam a comunicação entre processos, agindo como um buffer entre comandos.
mkfifo my_pipe
echo "Hello from process 1" > my_pipe
cat < my_pipe
rm my_pipe
Referências
- https://stackoverflow.com/questions/7069682/how-to-get-arguments-with-flags-in-bash
- https://medium.com/@wujido20/handling-flags-in-bash-scripts-4b06b4d0ed04
- http://docopt.org/
- https://linuxize.com/post/bash-functions/
- https://unix.stackexchange.com/questions/174566/what-is-the-purpose-of-using-shift-in-shell-scripts
- https://araji.medium.com/10-bash-scripting-constructs-every-engineer-should-know-47dfb90be98f