Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 12-03-2014 16:11:31

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

SHELL : comprendre $?

Coucou tout le monde,

j'ai essayé d'inventer un petit script qui ne sert à rien sinon d'apprendre à utiliser les variables de substitution prédéfinies, mais je ne comprends pas $? quand on utilise la redirection d'erreur.

Voilà :


#!/bin/bash
echo #!
if [ $# != 2 ] ; then
  echo "2 paramètres svp !"
  exit 1
else
  echo "bonjour $1 et bonjour $2"
fi
echo "il se fait déjà tard..."
echo #!
if [ $? == 0 ] ; then
  echo "Le retour de echo est correspondant à $?, je rentre dans le IF et vous dis :"
  echo "bonsoir !"
else
  echo "le retour de echo n'est corespondant à 0"
echo #!
fi

eccho eh 2> /dev/null
if [ $? == 0 ] ; then
  echo #!
else
  echo "ERREUR: la valeur de sortie ne correspond pas à 0 mais à $?"
  exit 2
fi
eccho eh 2> /dev/null
retour=$?
if [ $retour == 0 ] ; then
  echo #!
else
  echo "ERREUR: la valeur de sortie ne correspond pas à 0 mais à $retour"
fi
exit 0
 



Ce qui donne si je lance : ttdr a

2 paramètres svp !


et si j'appelle tout de suite après la valeur de sortie en faisant : echo $?
j'ai bien :
1

Jusque là ça me va.

Si je lance : ttdr a b
j'ai le retour :

bonjour a et bonjour b
il se fait déjà tard...

Le retour de echo est correspondant à 0, je rentre dans le IF et vous dis :
bonsoir !
ERREUR: la valeur de sortie ne correspond pas à 0 mais à 1
 


Bon je vois qu'il m'a remplacé le $? de la ligne 12 par 0 et ça me va parce que la commande c'est bien passé.

Mais je ne comprends pas pourquoi il me remplace le $? de la ligne 23 par 1 ?

En effet si je tape directement dans le terminal

eccho bonjour



puis après la petite engueulade si je rentre tout de suite echo $?
J'ai le retour 127 ! et non pas 1  !

C'est pourquoi je m'attendais à avoir : "ERREUR: la valeur de sortie ne correspond pas à 0 mais à 127".

Merci smile

Dernière modification par Hypathie (12-03-2014 16:13:43)

Hors ligne

#2 14-03-2014 00:34:45

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : SHELL : comprendre $?

Salut,

Une petite remarque :

Hypathie a écrit :

if [ $? == 0 ] ;


«==» n'est pas posix, c'est un bashisme.
c'est = pour les chaînes de caractères et -eq pour les nombres. J'écrirais cela :

if [ "$?" -eq "0" ]



Examinons ce morceau de code :

eccho eh 2> /dev/null
if [ $? == 0 ] ; then
  echo #!
else
  echo "ERREUR: la valeur de sortie ne correspond pas à 0 mais à $?"
  exit 2
fi



Quelle est la valeur de $? à la ligne 2 ? C'est la valeur de retour de la dernière commande, donc de l'exécution ratée de eccho, donc 127.
Quelle est la valeur de $? à la ligne 5 ? C'est la valeur de retour de la dernière commande, donc de l'exécution de «[ 127 == 0]», donc 1 (0 signifiant vrai dans le shell, et toutes les autres valeurs signifiant faux. Ce qui est exactement le contraire du C).


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#3 14-03-2014 07:23:39

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : SHELL : comprendre $?

Hors ligne

Pied de page des forums