J'ai vu le code écrit quelque part en ligne et je voulais savoir ce que signifie exactement "$?" fait/donnez-nous .. Googling n'a pas aidé.
Voici le code je l'ai vu dans:
#!/bin/sh
ping -c 2 localhost
if [ $? != 0 ] ; then
echo "Couldn't ping localhost, weird"
fi
ping -c 2 veryweirdhostname.noend
if [ $? != 0 ] ; then
echo "Surprise, Couldn't ping a very weird hostname.."
fi
echo "The pid of this process is $$"
Extrait de: http://efod.se/writings/linuxbook/html/Shell-scripts.html
$?
est une variable contenant la valeur de retour de la dernière commande exécutée.
Exemple de programme C (example.c
):
int main() { return 1; }
Exemple Bash:
gcc -o example example.c
./example
echo $? # prints 1
La plupart des réponses manquent un peu de détail. Une réponse définitive se trouve dans la norme POSIX pour le shell, dans la section sur les paramètres spéciaux :
$? Développe le statut de sortie décimal du pipeline le plus récent (voir Pipelines).
Ne soyez pas surpris par Word pipeline, car même une commande simple telle que ls
est grammaticalement un pipeline consistant en une seule commande. Mais alors, qu'est-ce que $?
pour un pipeline à commandes multiples? C'est l'état de sortie de la commande last du pipeline.
Et que dire des pipelines s’exécutant en arrière-plan, comme grep foo bigfile|head -n 10 > result &
?
Leur statut de sortie peut être récupéré via wait
une fois que la dernière commande du pipeline est terminée . Le pid du processus en arrière-plan est disponible en tant que $!
et $?
indique uniquement si la commande en arrière-plan était correctement démarrée.
Un autre détail qui mérite d'être mentionné est que l'état de sortie est généralement compris entre 0 et 255, 128 à 255 indiquant le processus quitté en raison d'un signal. Le renvoi d'autres valeurs d'un programme C risque de ne pas être reflété avec précision dans $?
.
C'est le code de retour de la dernière commande exécutée.
Par convention, 0 est une sortie réussie et non nul indique une sorte d'erreur.
Cette variable spéciale indique l'état de sortie de la dernière commande exécutée dans un script ou une ligne de commande. Par exemple, dans une ligne de commande, l'utilisateur peut taper
who; echo $?
La sortie serait alors
user tty7 2014-07-13 19:47
0
Ceci affiche la sortie de who et le statut de sortie de la commande. Un script serait le même.
#!/bin/bash
who
echo $?
Sortie: 0
les autres réponses couvrent assez bien bash, mais vous ne spécifiez pas de shell dans votre question. Dans csh (et tcsh), $?
peut être utilisé pour interroger l'existence de variables , par ex.
if $?my_var then
echo my_var exists
endif