[SHELL] Options de la commande READ ?

Résolu
Bonjour,

J'ai un petit soucis avec READ. Enfin, je ne sais pas si c'est avec cette commande ^^ Je m'explique.

J'ai ceci par exemple :

#!/bin/bash 
read -p "Tape ton prénom : " nom 
if [ $nom = RIC ]  
then 
       echo Salut $nom 
else exit 
fi


J'aimerais en fait que le "Read" ne prenne pas en compte la casse. C'est-à-dire, que là, en l'état actuel, si je tape "ric", cela me sort du programme. Si je tape "RIC", cela me dit bien "Salut RIC".

Donc je voudrais que même en tapant "ric" ou "Ric", cela me dise "Salut ric" ou "Salut Ric" ... Possible ?

Merci. :)



Là où flotte le drapeau Comtois, qui que tu sois, tu es chez toi !
"Plains ceux qui ont peur car ils créent leur propre terreur"

5 réponses

  1. salut,

    oui, cela ne dépend pas de la commande read.

    il y a une option du shell bash à positionner, et utiliser les double crochets
    #!/bin/bash 
    read -p "Tape ton prénom : " nom
    shopt -s nocasematch
    if [[ $nom = ric ]]
    then
           echo "Salut $nom"
    else
       exit
    fi
    1
    1. Bonjour :)

      Merci, ça marche parfaitement de cette façon :) C'est une chose à garder, très utile :D
      0
    2. En fait, j'ai une autre question :) Cette commande "shopt" s'utilise de quelle façon ? Obligatoirement après un "Read" ? après cela reste en mémoire ou non ?

      Merci

      ++

      EDIT : Exemple ici :

      #!/bin/bash 
      
      #début  
      read -p "Tape ton nom :" nom 
      read -p "Tape ton prénom :" prenom 
      clear 
      
      tableau=('ric' 'xxx' 'jean' 'yyy' 'pierre', 'zzz') 
      
      if [ $prenom = ${tableau[0]} ] && [ $nom = ${tableau[1]} ] 
       then  
          echo Bonjour à toi $prenom 
      elif [ $prenom = ${tableau[2]} ] && [ $nom = ${tableau[3]} ] 
       then  
          echo Bonjour à toi $prenom 
      elif [ $prenom = ${tableau[4]} ] && [ $nom = ${tableau[5]} ] 
       then  
          echo Bonjour à toi $prenom 
      else  
          echo Utilisateur inconnu ! && exit 
      fi


      * Pour ne pas que la casse soit prise en compte partout :)

      * Et sinon, y'a pas plus simple que le tableau, si je dois entrer des noms et prénoms plus nombreux ?

      ++
      0
    3. Pas d'idée ? :)
      0
    4. Contributeur
      oui, elle reste activée, pour la désactiver : shopt -u nocasematch
      ou utiliser la variable BASHOPTS, voir man bash
      ou utiliser ma méthode au cas par cas #3
      oui, le tableau est le meilleur stockage pour une liste de valeurs
      0
    5. Merci pour tes réponses.
      0
  2. Contributeur
    Salut,

    #!/bin/bash 
    read -p "Tape ton prénom : " nom 
    if [[ ${nom} =~ [Rr][Ii][Cc] ]]  
    then 
           echo Salut ${nom} 
    else exit 
    fi

    ;-))
    0
    1. Contributeur
      hello
      #!/bin/bash 
      read -p "Tape ton prénom : " nom
      if [ ${nom,,} = ric ]
      then
             echo "Salut $nom"
      else
         exit
      fi
      0
      1. Contributeur
        Salut,

        C'est pas bon ça, ni le "^" , ni même le "~" ;-((

        the , operator converts matching  uppercase  letters  to  lowercase.

        La demande initiale demande : Donc je voudrais que même en tapant "ric" ou "Ric", cela me dise "Salut ric" ou "Salut Ric"
        0
      2. Contributeur
        Pas compris ! $nom n'est convertit en minscule que pour le test.
        $ ./f1 
        Tape ton prénom : ric 
        Salut ric 
        $ ./f1 
        Tape ton prénom : RiC 
        Salut RiC 
        $ ./f1 
        Tape ton prénom : RIC 
        Salut RIC 
        $ ./f1 
        Tape ton prénom : riC 
        Salut riC 
        $  
        
        0
      3. Contributeur
        Arf, j'étais resté sur son exemple et le nom en majuscule "if [ $nom = RIC ]" ;-((

        Sorry ;-\
        0
      4. Contributeur
        2 ave et 5 pater :-))
        0
      5. Contributeur
        <ModeDonCamilloON>
        Tout de suite Monseigneur, mais ce n'était que quelques bashismes V4 ;-DD
        <ModeDonCamilloOFF>
        0
    2. ajoutons, par souci de clarté, que entre crochets simples les guillemets autour des variables sont plus que chaudement recommandés.
      alors qu'ils ne sont pas nécessaires entre double crochets.
      0