Detecção de erros de batida e dicas e truques de manuseio

Detecção de erros de batida e dicas e truques de manuseio

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.