Detecção de erros de batida e dicas e truques de manuseio
- 1021
- 170
- Loren Botsford
Para detectar e lidar com erros em um script bash, você pode usar o 'Set -e'
e 'armadilha'
comandos, bem como os 'se'
e 'caso'
declarações e o '||'
e '&&'
operadores.
Você pode usar o comando conjunto -e no início do seu script para ativar esse comportamento, ou pode usá -lo antes dos comandos individuais para ativá -lo apenas para esses comandos.
É importante observar que o 'Set -e'
O comando afeta apenas o status de saída dos comandos individuais. Não captura erros causados por erros de sintaxe ou outros problemas no próprio script. Para capturar esses tipos de erros, você pode usar o 'Set -o'
Opção Errexit em vez disso.
Vamos ver alguns exemplos:
- O
'Set -e'
O comando diz ao BASH para sair imediatamente se um comando retornar um status de saída diferente de zero. Isso é útil para detectar e lidar com erros em seu script. Por exemplo: #!/Bin/Bash Conjunto -e # Alguns comandos que podem falhar com comando1 comando2 # Esta linha só será alcançada se todos os comandos acima tiverem sucesso eco "todos os comandos concluídos com êxito"12345678910 #!/Bin/Bash Conjunto -e # Alguns comandos que podem falhar comCommand1Command2 # Esta linha só será alcançada se todos os comandos acima de sucesso "todos os comandos concluídos com êxito" Se command1 ou command2 retornar um status de saída diferente de zero, o script sairá imediatamente e a linha ecoará "Todos os comandos concluídos com êxito" não serão executados.
- Você também pode usar o
'||'
operador para executar outro comando se o anterior falhou. #!/Bin/Bash Conjunto -e # Alguns comandos que podem falhar com comando1 || echo "comando1 falhou"; saída 1; comando2 || echo "comando2 falhou"; saída 1; # Esta linha só será alcançada se todos os comandos acima forem bem -sucedidos eco "Todos os comandos concluídos com êxito"12345678910 #!/Bin/Bash Conjunto -e # Alguns comandos que podem falhar comCommand1 || echo "comando1 falhou"; saída 1; comando2 || echo "comando2 falhou"; saída 1; # Esta linha só será alcançada se todos os comandos acima do sucesso "todos os comandos concluídos com êxito" Neste exemplo, o || O operador é usado para executar o comando ou bloco de comandos seguindo -o se o comando anterior falhar. O comando de saída 1 é usado para sair do script com um status de saída diferente de zero, indicando um erro.
- O
'armadilha'
O comando permite que você especifique um comando ou série de comandos a serem executados quando um sinal específico é recebido. Você pode usar isso para capturar erros e executar tarefas de limpeza, como excluir arquivos temporários ou alterações revertidas. Por exemplo: #!/Bin/Bash Conjunto -e # Crie um arquivo temporário temp_file = $ (mktemp) # exclua o arquivo temporário na faixa de saída 'rm -f $ temp_file' saída # Alguns comandos que podem falhar com comando1 || echo "comando1 falhou"; saída 1; comando2 || echo "comando2 falhou"; saída 1; # Esta linha só será alcançada se todos os comandos acima forem bem -sucedidos eco "Todos os comandos concluídos com êxito"12345678910111213141516 #!/Bin/Bash Conjunto -e # Crie um fileTemp_file temporário = $ (mktemp) # exclua o arquivo temporário no exittrap 'rm -f $ temp_file' saída # Alguns comandos que podem falharCommand1 || echo "comando1 falhou"; saída 1; comando2 || echo "comando2 falhou"; saída 1; # Esta linha só será alcançada se todos os comandos acima do sucesso "todos os comandos concluídos com êxito" Neste exemplo, o comando TRAP especifica que o
'rm -f $ temp_file'
O comando deve ser executado quando o script receber o 'SAÍDA' sinal. Isso garante que o arquivo temporário seja excluído, mesmo que o script saia devido a um erro. - Você pode usar o
'se'
e'caso'
declarações para executar ações diferentes com base no status de saída de um comando. Por exemplo: #!/Bin/Bash Set -e # Alguns comandos que podem falhar se command1; Então Echo "Command1 conseguiu" else Echo "Comando1 falhou" Exit 1 fi case "$ (command2)" em "success") eco "comando2 sucedido" ;; "falha") comando echo "falhou 2"; saída 1 ;; ESAC # Esta linha só será alcançada se todos os comandos acima tiverem sucesso eco ", todos os comandos concluídos com êxito"12345678910111213141516171819 #!/Bin/Bash Set -e # Alguns comandos que podem falhar com comando1; Então Echo "Command1 sucedido" else Echo "comando1 falhou" Exit 1Fi Case "$ (Command2)" em "Sucesso") ECHO "Comando2 sucedido" ;; "falha") comando echo "falhou 2"; Saia 1 ;; ESAC # Esta linha só será alcançada se todos os comandos acima de sucesso "todos os comandos concluídos com êxito" Neste exemplo, a instrução IF é usada para verificar o status de saída do comando1, e a instrução CASE é usada para verificar a saída do comando2.
- Você também pode usar o
'&&'
operador para executar um comando ou bloco de comandos somente se o comando anterior for bem -sucedido. Por exemplo: #!/Bin/Bash Conjunto -e # Alguns comandos que podem falhar com command1 && command2 && comando3 # Esta linha só será alcançada se todos os comandos acima tiverem sucesso echo "todos os comandos concluídos com êxito"123456789 #!/Bin/Bash Conjunto -e # Alguns comandos que podem falhar com command1 && command2 && command3 # Esta linha só será alcançada se todos os comandos acima de sucesso "todos os comandos concluídos com êxito" Neste exemplo, o command2 só será executado se o comando1 for bem -sucedido e o comando3 somente será executado se o comando1 e o comando2 forem bem -sucedidos.
Embrulhar
Você pode usar o comando TRAP para capturar outros sinais também, como Int (interromper) ou PRAZO (encerrar). Para mais informações, você pode consultar a página do Bash Man ou pesquisar on -line tutoriais e exemplos.
Eu espero que isso ajude! Deixe -me saber se você tiver alguma dúvida.