A partir du man bash
:
$ ? S'étend jusqu'au statut de sortie du pipeline de premier plan le plus récemment exécuté.
echo $?
renverra l'état de sortie de la dernière commande. Vous avez 127
c'est le statut de sortie de la dernière commande exécutée avec une erreur (très probablement). Les commandes en cas de réussite se terminent avec un état de sortie de 0
(le plus probable). La dernière commande a donné la sortie 0
depuis le echo $v
sur la ligne précédente terminée sans erreur.
Si vous exécutez les commandes
v=4
echo $v
echo $?
Vous obtiendrez une sortie sous la forme :
4 (from echo $v)
0 (from echo $?)
Essayez également :
true
echo $?
Vous obtiendrez 0
.
false
echo $?
Vous obtiendrez 1
.
Le true
la commande ne fait rien, elle se termine simplement avec un code d'état 0
; et le false
la commande ne fait rien non plus, elle se termine simplement avec un code d'état indiquant un échec (c'est-à-dire avec le code d'état 1
).
$?
est utile dans les shellscripts pour décider quoi faire en fonction du fonctionnement de la commande précédente (vérification de l'état de sortie). Nous pouvons nous attendre à ce que le statut de sortie soit 0
lorsque la commande précédente a fonctionné (s'est terminée avec succès), sinon une valeur numérique non nulle.
Exemple de démonstration :
#!/bin/bash
patience=3
read -t "$patience" -p "Press 'Enter' if you run Unix or Linux, otherwise press 'ctrl+d' "
status="$?"
if [[ $status -eq 0 ]]
then
echo "That's great :-)"
elif [[ $status -eq 1 ]]
then
echo "(exit status=$status)
You are welcome to try Unix or Linux :-)"
else
echo "(exit status=$status)
You did not answer within $patience seconds. Anyway :-)"
fi
echo "'Unix & Linux' is a question/answer web site for
Unix and Linux operating systems"
Vous pouvez demander comment exécuter un shellscript bash sans Unix ou Linux ;-)