[SHELL] Options de la commande READ ?

Résolu
ric025 -  
 ric025 -
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. Utilisateur anonyme
     
    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. ric025
       
      Bonjour :)

      Merci, ça marche parfaitement de cette façon :) C'est une chose à garder, très utile :D
      0
    2. ric025
       
      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. ric025
       
      Pas d'idée ? :)
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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. ric025
       
      Merci pour tes réponses.
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

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

    ;-))
    0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    #!/bin/bash 
    read -p "Tape ton prénom : " nom
    if [ ${nom,,} = ric ]
    then
           echo "Salut $nom"
    else
       exit
    fi
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Arf, j'étais resté sur son exemple et le nom en majuscule "if [ $nom = RIC ]" ;-((

      Sorry ;-\
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      2 ave et 5 pater :-))
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      <ModeDonCamilloON>
      Tout de suite Monseigneur, mais ce n'était que quelques bashismes V4 ;-DD
      <ModeDonCamilloOFF>
      0
  4. Utilisateur anonyme
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question