[SHELL] Options de la commande READ ?

Résolu/Fermé
Utilisateur anonyme - Modifié par ric025 le 11/05/2012 à 10:58
 Utilisateur anonyme - 15 mai 2012 à 16:21
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"
A voir également:

5 réponses

Utilisateur anonyme
11 mai 2012 à 11:23
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
Utilisateur anonyme
14 mai 2012 à 09:28
Bonjour :)

Merci, ça marche parfaitement de cette façon :) C'est une chose à garder, très utile :D
0
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
Utilisateur anonyme
15 mai 2012 à 10:59
Pas d'idée ? :)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
15 mai 2012 à 12:30
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
Utilisateur anonyme
15 mai 2012 à 16:21
Merci pour tes réponses.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 mai 2012 à 11:17
Salut,

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

;-))
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
11 mai 2012 à 12:05
hello
#!/bin/bash 
read -p "Tape ton prénom : " nom
if [ ${nom,,} = ric ]
then
       echo "Salut $nom"
else
   exit
fi
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 mai 2012 à 12:12
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 11/05/2012 à 12:18
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 mai 2012 à 12:19
Arf, j'étais resté sur son exemple et le nom en majuscule "if [ $nom = RIC ]" ;-((

Sorry ;-\
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
11 mai 2012 à 12:25
2 ave et 5 pater :-))
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 mai 2012 à 12:28
<ModeDonCamilloON>
Tout de suite Monseigneur, mais ce n'était que quelques bashismes V4 ;-DD
<ModeDonCamilloOFF>
0
Utilisateur anonyme
11 mai 2012 à 12:40
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
14 mai 2012 à 09:31
Merci à tous :D
0