Pesquisa de site

Bash sair em caso de erro


Um código de status de saída é retornado quando qualquer comando do Linux é executado a partir do terminal, seja o comando bem-sucedido ou malsucedido. Esse código de status pode ser usado para mostrar a mensagem de erro para execução malsucedida ou executar qualquer tarefa específica usando script de shell. O código de status de saída sempre representa um número. O valor deste código é 0 para a execução bem-sucedida de qualquer comando do Linux e retorna qualquer número de 1 a 255 para a execução malsucedida do comando. Como o código de status existente pode ser usado no terminal e no script bash é mostrado neste tutorial.

Alguns códigos de status de erro comuns são mencionados abaixo.

Code Description Comments
0 It indicates successful execution.
1 It is used to catch all general errors. “Divide by zero”, “Operation not permitted” etc. can be the error messages of this code.
2 It indicates the abuse of shell built-ins. “Missing keyword”, “No such file or directory” etc. can be the error messages of this code.
126 It generates when the any command is unable to execute. Permission problem or required key not available can generate this status code
127 It normally generates for the command path problem. “Command not found” can be the message for this error code.
130 It generates for fatal error. “Script terminated by Ctrl+C” can be the message of this code.
255* It indicates exit code out of range.

Exemplo-1: Lendo o código de saída do terminal

A variável shell '$?' pode ser usada para exibir o código de saída de qualquer comando. ‘ls –la’ é um comando válido e mostra a lista de arquivos e pastas do diretório de trabalho atual. O valor de '$?' será 0 após a execução do comando 'ls -la'. 'ls –xyz' é um comando inválido e '$?' retornará 2 como código de erro após a execução do comando.

$ ls -la
$ echo $?
$ ls -xyz
$ echo $?

Exemplo-2: Lendo o código de saída no script bash

Crie um arquivo bash chamado read_file.sh com o seguinte script. Neste script, o nome do arquivo será considerado como entrada do usuário e o número total de linhas, palavras e caracteres desse arquivo será contado usando o comando `wc`. Se o nome do arquivo for válido, o valor de $status_code será 0 e, se o nome do arquivo for inválido, o valor de $status_code será 1.

read_file.sh

#!/bin/bash
echo "Enter the filename"
read filename
wc -lwc $filename
status_code=$?
echo "The exit of ‘wc’ command is : $status_code"

Exemplo 3: usando o valor do código de saída para realizar uma tarefa específica

Crie um arquivo bash chamado read_month.sh com o seguinte código. Aqui, um valor de data será considerado como entrada. O nome do mês será recuperado do valor da data se a data inserida for válida, caso contrário, a mensagem de erro "data inválida" aparecerá. A condição 'if' é usada no script para verificar o código de status de saída do comando de data. Se a condição for verdadeira, a mensagem de sucesso e o nome do mês da data serão impressos. Se a condição for falsa, a mensagem de falha e o código de status de saída 1 serão impressos.

read_month.sh

#!/bin/bash
echo "Enter a date in the format: YYYY-MM-DD"
read date_value
current_month=$(date -d "$date_value" '+%B')
if [ $? -eq 0 ]
then
echo "Date command is executed Successfully"
echo "Current month is $current_month"
else
echo "Date command is not executed Successfully"
exit 1
fi

Execute o script.

$ bash read_month.sh

Exemplo-4: Usando && e || com código de saída

O operador lógico '&&' é usado para código de saída bem-sucedido e o operador lógico '||' é usado para código de saída malsucedido. O comando a seguir imprimirá 'Arquivo existe' se o arquivo book.txt existir no local atual e imprimirá 'Arquivo não existe' se o arquivo book.txt não existir no local atual localização.

$ cat book.txt && echo "File exists" || echo "File not exists"

Conclusão:

Diferentes usos do código de status de saída são mostrados neste tutorial. Espero que o leitor tenha um conceito claro sobre o código de status de saída do bash depois de ler este tutorial.

Artigos relacionados: