Oi, Bruno!
Vamos lá, vou tentar esclarecer suas dúvidas:
Sobre o $?
O $?
é uma variável especial no shell que armazena o código de retorno do último comando executado. Ele é muito útil para verificar se um comando foi bem-sucedido ou não. Por exemplo, se você executar um comando e ele for bem-sucedido, o $?
geralmente será 0
. Se houver um erro, ele retornará um valor diferente de 0
.
Sobre o exit 1
O comando exit
é usado para sair de um script e retornar um código de status ao sistema operacional. O número que você coloca após exit
(no caso, 1
) é o código de status que será retornado.
exit 0
: Indica que o script foi executado com sucesso.exit 1
: Indica que houve um erro genérico.exit 2
, 3
, 4
, etc.: Você pode usar esses valores para indicar diferentes tipos de erros específicos no seu script.
Por exemplo, se você quiser indicar que um erro específico ocorreu, você pode usar um código de saída diferente:
if [ "$operacao" != "compactar" ] && [ "$operacao" != "descompactar" ]; then
echo "Operacao invalida!"
echo "Selecione descompactar ou compactar"
exit 1 # Aqui você está indicando que houve um erro genérico
fi
Exemplo Prático
Aqui está um exemplo prático de como você pode usar o $?
e diferentes códigos de saída:
#!/bin/bash
read -p "Entre com a operação desejada: 'compactar' ou 'descompactar'" operacao
case "$operacao" in
"compactar")
read -p "Nome do arquivo final (.tar.gz)" arquivo_saida
read -p "Lista de arquivos separados por espaço:" arquivos
tar -czf "$arquivo_saida" $arquivos
if [ $? -eq 0 ]; then
echo "Compactados com sucesso em $arquivo_saida"
exit 0
else
echo "Erro ao compactar arquivos"
exit 2
fi
;;
"descompactar")
read -p "Nome do arquivo a descompactar (.tar.gz)" arquivo
read -p "Diretorio de destino" diretorio
tar -xzf "$arquivo" -C "$diretorio"
if [ $? -eq 0 ]; then
echo "Descompactado com sucesso em $diretorio"
exit 0
else
echo "Erro ao descompactar arquivos"
exit 3
fi
;;
*)
echo "Operacao invalida!"
echo "Selecione descompactar ou compactar"
exit 1
;;
esac
Neste exemplo, se a operação de compactação ou descompactação falhar, o script retornará um código de erro específico (2
ou 3
), que pode ser útil para depuração.
Bons estudos!