IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Quand mettre des doubles crochets dans un test ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 169
    Points : 76
    Points
    76
    Par défaut Quand mettre des doubles crochets dans un test ?
    Bonjour,

    étant débutant en shell , je ne comprends pas trop la différence entre crochets et doubles crochets dans un cas de test en shell .
    Dans l'exemple ci-dessous faut-il mettre double crochets ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ ! -z "$var1" ]
    then
      if [ $(grep -c "$toto" /etc/mon_fic) -gt 0  ]
    Merci

  2. #2
    Expert éminent sénior
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur système Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur système Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 476
    Points : 11 051
    Points
    11 051
    Par défaut
    Bonjour,

    Voici un extrait de la FAQ Linux :
    De manière générale, il faut encadrer les variables par des doubles quotes dans ses scripts, notamment lorsque l'on utilise la commande test ou son fork [ afin d'éviter ce genre d'erreurs.

    Ceci ne s'applique pas lorsque l'on utilise la syntaxe Bash des doubles crochets [[ (commande test étendue).
    Références :
    http://linux.developpez.com/faq/?pag...-commande-test
    Commandes avancees - Pourquoi faut-il encadrer les variables par des doubles quotes avec la commande test ?

    http://ineumann.developpez.com/tutor...ratiques/#LI-B
    Quelques bonnes pratiques dans l'écriture de scripts Bash : Protéger ses opérandes
    Il est important de prendre l'habitude de protéger ses opérandes, soit en privilégiant la syntaxe des doubles-crochets apparue dans KSH 88, soit en prenant l'habitude de systématiquement encadrer ses variables par des « doubles-quotes ».
    « 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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Bonjour,

    les crochets doubles ([[) doivent être utilisés pour accéder à des tests avancés.

    par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ [[ "var" == [vV]ar ]] && echo ok || echo KO
    ok
    $ rgx='r$'; [[ var =~ $rgx ]] && echo ok || echo ko
    ok
    $
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par doudou8mc Voir le message
    Bonjour,

    étant débutant en shell...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ ! -z "$var1" ]
    then
      if [ $(grep -c "$toto" /etc/mon_fic) -gt 0  ]
    Petite remarque sans rapport (direct) avec les crochets: un certain nombre de débutants (ou pas (mais c'est plus grave!)) comparent à zéro le nombre d'occurrences d'un grep alors que grep fait ça très bien avec l'option -q!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ ! -z "$var1" ]
    then
      if grep -q "$toto" /etc/mon_fic; then etc.
    Le rapport indirect avec les crochets, c'est que [ ! -z "$var1" ] est (en gros) équivalent à test ! -z "$var1", et donc if [ ! -z "$var1" ] est équivalent à if test ! -z "$var1".
    D'une certaine manière, on pourrait dire que la destinée "normale" d'un "if" n'est pas d'être suivi de crochets mais d'un appel de fonction (ou de commande), contrairement à ce que l'usage le plus répandu (des crochets) semble faire croire.
    En tout cas, même si on utilise majoritairement le "if" suivi de crochets, il est de bon ton de se rappeler que c'est comme une commande déguisée et de se rappeler qu'on peut utiliser directement la commande si ça correspond précisément à ce qu'on veut faire!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    j'ai répondu au sujet sans analyser le code, mais ! -z = -n (cf. help test !)
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre des double dans un tableau de char
    Par limprid dans le forum Débuter
    Réponses: 2
    Dernier message: 01/08/2012, 11h02
  2. mettre des doubles dans une formule?
    Par smedini dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/08/2007, 15h24
  3. Mettre des retrours chariot dans un fichier
    Par Isa31 dans le forum Windows
    Réponses: 4
    Dernier message: 02/03/2006, 17h39
  4. Mettre des retours chariot dans un fichier
    Par Isa31 dans le forum Langage
    Réponses: 8
    Dernier message: 02/03/2006, 16h13
  5. Réponses: 9
    Dernier message: 17/10/2005, 10h44

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