Não muito raramente precisamos saber se um determinado script foi executado com sucesso ou não? Para isso, vamos usar a váriável $? ela retorna “0” se o ultimo comando foi executado com sucesso, e retorna “1” se houve erro neste comando.
Abaixo segue uma tabela com essas variáveis especiais que estão disponíveis no shell:
Variável Descrição:
- $1 Parâmetro número 1 (da linha de comando ou função)
- … Parâmetro número N da linha de comando ou função)
- $9 Parâmetro número 9 (da linha de comando ou função)
- ${10} Parâmetro número 10 (da linha de comando ou função)
- $# Número total de parâmetros da linha de comando ou função
- $* Todos os parâmetros, como uma string única
- $@ Todos os parâmetros, como várias strings protegidas
- $$ PID do processo atual (do próprio script)
- $! PID do último processo em segundo plano
- $_ Último argumento do último comando executado
- $? Valor de retorno do último comando executado
Veja este exemplo do comando cat em meu terminal:
cat meuprograma.py
O comando cat foi executado com sucesso, então vamos verificar o que ficou salvo na variável $?:
Como o comando foi executado com sucesso, na variável ficou registrado o o valor 0 que aqui podemos interpretar como sendo True ou Verdadeiro.
Então vamos testar um comando que irá falhar para vermos o que ficará salvo na variável $? neste caso:
Podemos então entender que quando o comando não é executado com êxito, o valor 1 é salvo na variável $?, ou seja: False ou Falso.
No exemplo abaixo só coloquei o resultado de “sucesso” porque em meus testes, quando tentei compactar um arquivo inexistente ou mesmo colocando argumentos errados para compactar, simplesmente o comando não era executado, ‘quebrando’ assim o script:
#!/bin/bash
tar -zcf escrever.tar.gz escrever.py
if [ $? -eq 0 ]
then
echo "sucesso"
fi
Esta dica foi retirada de uma resposta minha à uma dúvida publicada no StackOverflow em Português