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

como saber se comando do script foi executado com sucesso

Veja este exemplo do comando cat em meu terminal:

felix@asgard:[~]: cat escrever.py 
arq = open('arquivo.txt','w')
arq.write("Pyhton é legal")
arq.close()

O comando cat foi executado com sucesso, então vamos verificar o que ficou salvo na variável $?:

felix@asgard:[~]: echo $?
0

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:

felix@asgard:[~]: cat escreve.py 
cat: escreve.py: No such file or directory
felix@asgard:[~]: echo $?
1

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