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
No 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.
Status de saída: como funciona
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.
– 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.
Verificando 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 $?.
#Exemplo básico
#!/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
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=”/meu_diretorio”
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, você pode verificar o status do script com $? no terminal. Se o diretório existir, $? terá valor 0; se não existir, $? terá valor 1.
Utilizando 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.
#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 a internet estabelecida.”
else
echo “Erro: sem conexão com a internet.”
exit 1
fi
Neste exemplo:
– O comando ping tenta se conectar ao google.com.
– Se o status de saída for 0, o script informa que a conexão está estabelecida.
– Se o status de saída for diferente de 0, exibe uma mensagem de erro e finaliza o script com exit 1.
Trabalhando com operadores && e ||
Os operadores && (AND) e || (OR) permitem executar comandos baseados no status de saída do comando anterior.
– Comando1 && Comando2: Executa o Comando2 somente se o Comando1 for bem-sucedido.
– Comando1 || Comando2: Executa o Comando2 somente se o Comando1 falhar.
#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.”
Exemplos práticos
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
—
Exercícios práticos
1. Verificar a existência de um diretório
Crie um script que receba o nome de um diretório como argumento. O script deve verificar se o diretório existe. Se existir, exiba “Diretório encontrado” e finalize com exit 0; caso contrário, exiba “Diretório não encontrado” e finalize com exit 1.
2. Verificar se um número é positivo ou negativo
Crie 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.
3. Conexão com a internet
Crie um script que verifique a conexão com a internet usando o comando ping para google.com. Se a conexão for bem-sucedida, exiba “Conexão ativa” e finalize com exit 0. Caso contrário, exiba “Erro: sem conexão” e finalize com exit 1.
4. Verificar permissões de leitura de um arquivo
Crie um script que receba o caminho de um arquivo como argumento e verifique se o usuário tem permissão de leitura. Se tiver, exiba “Permissão de leitura confirmada” e finalize com exit 0; caso contrário, exiba “Permissão negada” e finalize com exit 3.
5. Executar um comando condicionalmente
Crie um script que tente criar um diretório chamado /tmp/teste_condicional. Se o diretório for criado com sucesso, exiba “Diretório criado”; caso contrário, exiba “Falha ao criar o diretório”.
—
Resolução dos exercícios
#Exercício 1: Verificar a existência de um diretório
#!/bin/bash
diretorio=$1
if [ -d “$diretorio” ]; then
echo “Diretório encontrado.”
exit 0
else
echo “Diretório não encontrado.”
exit 1
fi
#Exercício 2: Verificar se um número é positivo ou negativo
#!/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
#Exercício 3: Conexão com a internet
#!/bin/bash
ping -c 1 google.com > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo “Conexão ativa”
exit 0
else
echo “Erro: sem conexão”
exit 1
fi
#Exercício 4: Verificar permissões de leitura de um arquivo
#!/bin/bash
arquivo=$1
if [ -r “$arquivo” ]; then
echo “Permissão de leitura confirmada”
exit 0
else
echo “Permissão negada”
exit 3
fi
#Exercício 5: Executar um comando condicionalmente
#!/bin/bash
mkdir /tmp/teste_condicional && echo “Diretório criado” || echo “Falha ao criar o diretório”
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.