Shell Scripting – Status de saída dos comandos e o comando exit – 12
Status de saída dos comandos e o comando exit em Shell Scripting
Em Shell Scripting, o status de saída de um comando indica se ele foi executado com sucesso ou se ocorreu algum erro. Esse status é representado por um código numérico onde 0 indica sucesso, e qualquer outro número indica uma falha.
O comando exit é usado para finalizar um script e pode retornar um status de saída específico para indicar ao sistema o sucesso ou erro da execução.
Como funciona o status de saída
Cada comando ou script em execução no terminal retorna um status de saída. Esse status pode ser acessado através da variável especial $?, que armazena o status do último comando executado. Os status disponíveis são:
- Status de saída 0: indica que o comando foi executado com sucesso.
- Status de saída diferente de 0: indica que houve um erro.
Como verificar o status de saída de um comando
Para verificar o status de saída de um comando, podemos executar o comando e logo em seguida verificar o valor da variável $?. Vejamos um exemplo no script a seguir.
#!/bin/bash ls /etc echo "Status de saída do comando ls: $?" ls /diretorio_que_nao_existe echo "Status de saída do comando ls: $?"
Neste exemplo:
1. O primeiro comando ls /etc deve listar o conteúdo de /etc, e o status de saída será 0 (sucesso).
2. O segundo comando tenta listar um diretório inexistente (/diretorio_que_nao_existe), e o status de saída será diferente de 0 (erro).
O comando exit no Linux
O comando exit é utilizado para terminar a execução de um script e retornar um status de saída. Esse status pode ser qualquer número que você queira definir para indicar se o script foi bem-sucedido ou se houve um erro.
- exit 0: Indica que o script foi executado com sucesso.
- exit 1, exit 2, etc.: Indica que houve um erro ou situação específica no script. Os números de erro podem ser usados de acordo com a sua lógica para representar diferentes tipos de problemas.
Exemplo de uso do exit
O exemplo abaixo verifica se um diretório existe. Se o diretório existir, o script termina com exit 0; se não existir, termina com exit 1.
#!/bin/bash diretorio="/bin" if [ -d "$diretorio" ]; then echo "O diretório $diretorio existe." exit 0 else echo "O diretório $diretorio não existe." exit 1 fi
Após a execução, podemos verificar o status do script com echo $? no terminal. Se o diretório existir, $? terá valor 0; se não existir, $? terá valor 1.
Como utilizar o status de saída para controle de fluxo
O status de saída de um comando pode ser usado para controlar o fluxo do script com condicionais. Vejamos um exemplo com if e status de saída.
#!/bin/bash ping -c 1 google.com > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Conexão com o site está OK." else echo "Erro: servidor não respondeu." exit 1 fi
Neste exemplo:
- O comando ping tenta se conectar ao servidor de endereço google.com.
- Se o status de saída for 0, o script informa que a conexão está OK.
- Se o status de saída for diferente de 0, exibe uma mensagem de erro e finaliza o script com exit 1. Para testar esse erro, altere o endereço do site no script para “google.con” (com n) e rode o script novamente.
Finalmente, verificamos no terminal o status de saída retornado pelo script:
$ echo $?
Trabalhando com operadores && e ||
Os operadores && (AND) e || (OR) permitem executar comandos baseados no status de saída do comando anterior, conforme segue:
- Comando1 && Comando2: Executa o Comando2 somente se o Comando1 for bem-sucedido.
- Comando1 || Comando2: Executa o Comando2 somente se o Comando1 falhar.
A seguir temos um exemplo com && e ||.
#!/bin/bash mkdir /tmp/novo_diretorio && echo "Diretório criado com sucesso." || echo "Falha ao criar o diretório."
Neste exemplo:
- Se o diretório /tmp/novo_diretorio for criado com sucesso, a mensagem “Diretório criado com sucesso.” será exibida.
- Caso o diretório já exista ou ocorra um erro, exibe “Falha ao criar o diretório.”
Mais exemplos de status de saída no Linux
Vejamos mais alguns exemplos do emprego de status de saída em scripts do shell.
1. Verificar um arquivo específico
O exemplo abaixo verifica se o arquivo /etc/passwd existe. Se existir, o script exibe “Arquivo encontrado” e sai com exit 0. Caso contrário, exibe “Arquivo não encontrado” e sai com exit 1.
#!/bin/bash if [ -e /etc/passwd ]; then echo "Arquivo encontrado." exit 0 else echo "Arquivo não encontrado." exit 1 fi
2. Usar exit para verificar permissões de execução
Neste exemplo, verificamos se o usuário tem permissão para executar um arquivo. Se tiver, o script exibe “Você tem permissão de execução”; caso contrário, exibe uma mensagem de erro e finaliza com exit 1.
#!/bin/bash arquivo="/usr/bin/nano" if [ -x "$arquivo" ]; then echo "Você tem permissão de execução para $arquivo." exit 0 else echo "Erro: sem permissão de execução para $arquivo." exit 1 fi
3. Verificar se um número é positivo ou negativo
Vamos criar um script que receba um número como argumento. Se o número for positivo, exiba “Número positivo” e finalize com exit 0; se for negativo, exiba “Número negativo” e finalize com exit 2.
#!/bin/bash numero=$1 if [ $numero -gt 0 ]; then echo "Número positivo" exit 0 elif [ $numero -lt 0 ]; then echo "Número negativo" exit 2 else echo "O número é zero" exit 3 fi
Para testar, executamos o script passando um número a ele como argumento:
$ script.sh 5
Conclusão
O uso do status de saída dos comandos e do comando exit permite que scripts de Shell verifiquem se as operações foram bem-sucedidas ou se houve erros, controlando assim o fluxo e a resposta do script.
Isso é muito útil em automação e monitoramento, onde cada comando pode afetar os passos seguintes e onde é importante comunicar o resultado da execução ao sistema e aos usuários.
Gosto muito das suas aulas, quero parabeniza-lo pelos excelentes conteúdos, estou tentando aprender linux e gostaria saber se ha curso online. Vi também que não ha todas as aulas no site.