Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Apprendre � ma�triser les conditions en bash [Tutoriel]


Sujet :

Shell et commandes GNU

  1. #1
    Membre Expert

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2017
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Septembre 2017
    Messages : 37
    Par d�faut Apprendre � ma�triser les conditions en bash
    Chers membres du club,

    J'ai le plaisir de vous pr�senter ce tutoriel de Quentin Busuttil :


    Le scripting bash est souvent d�routant. La syntaxe est parfois assez �loign�e de ce � quoi nous sommes habitu�s dans d'autres langages. C'est d'ailleurs pourquoi beaucoup l'�vitent au maximum. Pourtant, t�t ou tard, on a tous besoin d'�crire un petit .sh pour g�rer un service ou automatiser un comportement sur un serveur.

    Voil� pourquoi un petit rappel du fonctionnement des conditions - base de tout langage de programmation - en bash peut s'av�rer salvateur. En route pour bashland !

    Sous Linux et Unix, il existe plusieurs interpr�teurs de commandes ou shells. Les fonctions support�es par l'un ou l'autre peuvent varier. Ainsi, nous parlons ici de bash, alias bourne again shell, une impl�mentation du shell standard d'Unix, sh, le shell historique. Bash est 100 % compatible avec sh, en revanche, la r�ciproque n'est pas vraie. Nous verrons justement cela dans les conditions.
    Bonne lecture

    Retrouvez les meilleurs cours et tutoriels pour apprendre le syst�me Linux.

  2. #2
    Mod�rateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    F�vrier 2008
    Messages
    7 686
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 7 686
    Par d�faut
    Bonjour,


    Par ailleurs, on trouvera des crochets en lieu et place des habituelles parenth�ses.
    non.
    d'ailleurs "habituelles" par rapport � quoi ?
    la syntaxe de if est
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi
    c'est-�-dire que les crochets, en fait, sont une commande, et plus exactement un synonyme de la commande test.
    donc, il est possible d'�crire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    if grep -q ":${USER}:" /etc/passwd; then echo "$USER est un utilisateur"; else echo "$USER n'est pas un utilisateur"; fi
    c'est pourquoi on est quelques uns � pr�coniser l'emploi de test, plut�t que les crochets, pour �viter ce contresens. � un caract�re pr�s , c'est �gal, et plus �loquent.


    il vaut mieux ne pas utiliser == avec test pour ne pas confondre le comportement qu'ils ont entre double crochets.


    c'est bien de souligner que, lorsqu'on emploi la commande test (ou son synonyme), les variables doivent toujours �tre mises entre guillemets. si, si, c'est une obligation, sous risque d'erreur; tu l'indiques justement.
    ce n'est pas le cas pour les doubles crochets. (voir plus bas)


    un simili d'expression r�guli�re
    pourquoi "simili" ?


    il est possible d'omettre les guillemets autour des variables, car les espaces ne causent plus probl�me. C'est cependant une bonne habitude � conserver, car ailleurs dans les scripts, il est plus prudent de les mettre.
    bof.


    les conditions simples ne requi�rent pas if.
    pour reprendre mon exemple pr�c�dent :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    grep -q ":${USER}:" /etc/passwd && echo "$USER existe" || echo "$USER n'existe pas"
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirm� Avatar de disedorgue
    Homme Profil pro
    Ing�nieur int�gration
    Inscrit en
    D�cembre 2012
    Messages
    4 378
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur int�gration
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 4 378
    Par d�faut
    Pour ma part, il y a des lacunes dans les explications, exemple:
    Syntaxe invalide mais pas d'erreur:
    La m�me mais cette fois la syntaxe est valide:
    Les espaces ne sont pas uniquement entre les crochets ouvrant et fermant.

    Il manque aussi les expressions du type:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    $ [ 1 = 1 -o 2 = 1 ] && echo ok
    ok
    $ [ 1 = 1 -a 2 = 2 ] && echo ok
    ok
    Et un autre sympathique:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    $ if (( 1==1 ? 0 : 1 )) ; then echo ok ; else echo ko ; fi
    ko
    que l'on peut aussi exploiter comme ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    $ echo $(( 1==1 ? 5 : 6 ))
    5
    $ echo $(( 1==0 ? 5 : 6 ))
    6
    @N_BaH: m�me si tu pr�cise dans les cas simple, soyons plus pr�cis pour:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    grep -q ":${USER}:" /etc/passwd && echo "$USER existe" || echo "$USER n'existe pas"
    Le but ici, c'est que la partie � droite du '&&' doit toujours �tre vrai sinon la partie ou (� droite du '||' ) s�ex�cutera aussi.
    Donc la syntaxe simplifier doit sous entendre la syntaxe compl�te suivante:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    grep -q ":${USER}:" /etc/passwd && { echo "$USER existe" ; true ; } || echo "$USER n'existe pas"

  4. #4
    Membre Expert

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2017
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Septembre 2017
    Messages : 37
    Par d�faut
    Bonjour,

    Merci @N_BaH et @disedorgue pour vos retours �clair�s.

    Je vais faire une update rapidement en prenant en compte vos remarques !

    Bonne journ�e.

  5. #5
    Membre Expert
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur syst�me Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 568
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 63
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : Administrateur syst�me Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 568
    Par d�faut
    Bonjour,
    Bravo pour ce travail, juste une remarque de langage et sur l'exemple choisi :

    Seul exemple en anglais parmi les autres termes fran�ais (on peut par exemple citer le terme courant anglais en introduction de paragraphe) :
    II-A-2. Conditions sur les strings
    et l'exemple choisi est "ta m�re"
    On parle bien de cha�ne de caract�res...
    � Developpez.com est un groupe international de b�n�voles dont la motivation est l'entraide au sens large � (incl. forums developpez.net)
    Club des professionnels en informatique

    Liste des balises BB

  6. #6
    Membre Expert

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2017
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Septembre 2017
    Messages : 37
    Par d�faut
    Ah en effet, le "string" a du �chapper aux correcteurs (je corrigerai �a aussi). C'est vrai que dans l'article original, je fais moins attention aux anglicismes.

    Haha, bien vu pour "ta m�re", je ne m'en souvenais m�me plus �a fait une petite note d'humour.
    Tu trouves cela d�plac� sur Developpez ?

    Merci de ta vigilance

  7. #7
    Membre Expert
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur syst�me Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 568
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 63
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : Administrateur syst�me Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 568
    Par d�faut
    Disons que c'est l'association string et ta m�re qui m'a surpris (mais pas "choqu�") dans un premier temps.
    Ensuite, je n'ai aucune l�gitimit� "morale" sur ton travail, mais disons que par les temps qui courent il me semble plus judicieux d'utiliser un exemple "moins sexiste" et qui aura tendance � mal vieillir.

    Je crois savoir que l'univers GNU / Linux est rempli de gens avec le sens de l'humour et qui aiment la nature, on y croise des gnous, des pingouins, des manchots, des renards, des pandas roux, des cam�l�ons, etc.
    � Developpez.com est un groupe international de b�n�voles dont la motivation est l'entraide au sens large � (incl. forums developpez.net)
    Club des professionnels en informatique

    Liste des balises BB

  8. #8
    R�dacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    F�vrier 2009
    Messages
    5 220
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : IS Consultant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 5 220
    Par d�faut
    Bonjour.

    Je plussoie pour l'impr�cision de la phrase "Par ailleurs, on trouvera des crochets en lieu et place des habituelles parenth�ses."

    Originellement [ est une commande ind�pendante de l'instruction shell if (il s'agit d'ailleurs d'un fork de la commande test) qui renvoie succ�s (0) si l'expression bool��nne est vrai et �chec (1) si l'expression bool��nne en param�tre est fausse :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    ineumann ~ $ [ "u" = "v" ]
    ineumann ~ $ echo $?
    1
    ineumann ~ $ [ "u" = "u" ]
    ineumann ~ $ echo $?
    0
    On la retrouve d'ailleurs dans /bin sur certains OS :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    ineumann ~ $ ls -l /bin/[
    -rwxr-xr-x. 1 root root 53264 Oct 31  2016 '/bin/['
    Dans les versions modernes de bash c'est un builtin au m�me titre que [[ qui est bien souvent pr�f�rable, voir ceci : Prot�ger ses op�randes

    En outre if lui test le retour d'une commande (si retour 0 alors on rentre dans le if, sinon non de m�me que pour the_cmd && echo "ok" || echo "ko", syntaxe que vous pourriez aborder d'ailleurs) et donc pas forcemment uniquement [ : if grep, if test, ...

    Bref, on a l'habitude de ne pas faire d'approximations ou d'affirmations fausses dans les cours de developpez.com m�me si les intentions sont louables, cela peux conduire � des erreurs de compr�hensions qui peuvent parfois �tre g�nantes et � l'origine de bugs.

    Je plussoie �galement pour le fait que sur une communaut� de professionnel on �vites les phrases comme "ta m�re" qui sont � mon sens d�plac�es dans un cours r�dig� � l'usage de professionnels. Dans une formation interne entre coll�gues et sur des slides � la limite on peu se permettre d'�tre "fun" � sa mani�re mais dans un cours ou ouvrage r�dig� et pour une grande audience, c'est inappropri�.

    En l'�tat je ne vois pas bien la valeur ajout�e par rapport aux autres cours sur le Shell qui sont d�j� pr�sents sur DVP (en particulier celui de Fr�d�ric dans lequel figure tout le contenu de vos explications avec moins d'impr�cisions). Par contre si vous d�taillez davantage les explications � partir de nos messages, cela pourrait avoit un int�r�t.

    Bien � vous,
    Idriss

  9. #9
    Membre Expert

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2017
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Septembre 2017
    Messages : 37
    Par d�faut
    Bonjour,

    @disedorgue, la syntaxe ternaire est "sympa" � conna�tre mais je ne sais pas si elle a un r�el apport dans le cas d'une condition ? Aucun doute pour l'assignation mais pour le test, je n'ai pas de cas d'usage en t�te.

    Cordialement,

  10. #10
    Expert confirm� Avatar de disedorgue
    Homme Profil pro
    Ing�nieur int�gration
    Inscrit en
    D�cembre 2012
    Messages
    4 378
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur int�gration
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 4 378
    Par d�faut
    Peut-�tre bien que oui ou peut-�tre bien que non, par exemple ceci est permis (les couleurs pour montrer qui va avec qui) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    if (( 1==1 ? 2==2 ? 3==3 ? 1 : 0 : 1 : 1 )) .....

  11. #11
    Membre habitu�
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Janvier 2012
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par d�faut Ma�triser les conditions en bash : elif avec then ou pas ?
    Bonjour Buzut,

    Tout d'abord merci pour cet article sur les conditions en BASH: pas toujours simple de s'y retrouver, c'est une bonne et bien pratique synth�se.

    N'y aurait t'il pas un oubli sur l'exemple de la partie "I. Anatomie d'un if" . Le elif ne doit il pas �tre absolument suivi par un then ?
    ...
    echo "le test est pass�"
    elif [ test2 ]
    then
    echo "le test2 est pass�"
    ...

Discussions similaires

  1. R�ponses: 6
    Dernier message: 15/09/2014, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo