Middle
Como lida com erros de utilizador no bash?
sobes.tech IA
Resposta da IA
No bash, os erros do utilizador são principalmente tratados usando:
- Códigos de saída dos comandos: Cada comando devolve um código de finalização (estado de saída).
0geralmente significa sucesso, qualquer outro valor indica um erro. - Estruturas condicionais:
if,elif,elsesão usados para verificar os códigos de saída. - Operadores lógicos:
&&(e),||(ou) permitem executar comandos dependendo do sucesso/fracasso dos anteriores. - Redireções de saída:
>(stdout),2>(stderr),&>(stdout e stderr). - Traps: Permitem executar um comando ao receber um sinal ou ao terminar um script.
Exemplos:
#!/bin/bash
# Verificação do código de saída
if ! command_that_might_fail; then
echo "Erro na execução do comando!" >&2 # Redirecionamento para stderr
exit 1 # Terminar o script com código de erro
fi
# Operador lógico &&
command_successful && echo "Comando executado com sucesso" || echo "O comando terminou com erro"
# Trap para lidar com SIGINT (Ctrl+C)
trap 'echo "Sinal de interrupção recebido. A sair..."; exit 1' SIGINT
# Redirecionar erros e mensagem
if command_with_errors 2> error.log; then
echo "Comando executado sem erros"
else
echo "Erros detectados. Detalhes em error.log"
fi
Para aumentar a fiabilidade dos scripts, também se usam:
set -e: O script termina se qualquer comando falhar (exceto emifewhile).set -u: Variáveis devem estar definidas antes de usar.set -o pipefail: O código de saída de uma pipeline será o de a última comando que falhou.
#!/bin/bash
set -euo pipefail
# Este script terminará se "undefined_var" não estiver definido
echo "$undefined_var"
# Este script terminará se "failing_command" devolver um código diferente de zero
failing_command
Uso de funções e argumentos:
#!/bin/bash
# Função com verificação de argumentos
validate_args() {
if [ $# -ne 2 ]; then
echo "Uso: $0 <argumento1> <argumento2>" >&2
exit 1
fi
}
validate_args "$@"