Boucle pour vérifier un caractère
Bonjour,
Je cherche à réaliser une vérification de certaines de mes variables quand on rentre dans mon programme
Il faudrait que chacun de mes paramètres correspondent soit a A ou B ou C ou D ou E ou F ou G ou H.
Je pensais faire une vérification avec un tableau mais celui ci ne prends que la première valeur du tableau :/
Je cherche à réaliser une vérification de certaines de mes variables quand on rentre dans mon programme
ch1=$1
ch2=$2
ch3=$3
ch4=$4
code=$ch1$ch2$ch3$ch4
letter=('A' 'B' 'C' 'D' 'E' 'F' 'G' 'H')
while [[ "$ch1" != "${letter}" ]]
do
read -p 'Il faut un code valide : ' ch1 ch2 ch3 ch4
done
Il faudrait que chacun de mes paramètres correspondent soit a A ou B ou C ou D ou E ou F ou G ou H.
Je pensais faire une vérification avec un tableau mais celui ci ne prends que la première valeur du tableau :/
Configuration: Windows / Firefox 75.0
1 réponse
-
ContributeurSalut,
Une idée parmi d'autres…
$ cat bar.sh #! /bin/bash #set -xv A=( A B C D E F G H ) for i in "${@}" do case "${i}" in A|B|C|D|E|F|G|H) echo "Paramètre ${i} correct." ;; *) echo "Paramètre ${i} incorrect." ;; esac done$ ./bar.sh A B J N O E X C
Paramètre A correct.
Paramètre B correct.
Paramètre J incorrect.
Paramètre N incorrect.
Paramètre O incorrect.
Paramètre E correct.
Paramètre X incorrect.
Paramètre C correct.
;-)
-
-
Contributeur@BojaminÀ part éclater ton paramètre afin de checker chaque caractère un par un, je ne vois pas ;-\
-
@Bojamincomme ça ?
re='^[A-H]{4}$' $ [[ ABCD =~ $re ]]; echo $? 0 $ [[ ABCZ =~ $re ]]; echo $? 1 -
Contributeur@Cobalt222SSalut,
Je pense que c'est plus complexe que ça ;-(
ABCD était un exemple, mais je pense qu'on pourrait avoir ADEH ou BCAG, ou encore CAHFD, etc. comme argument avec les bons caractères, d'où la nécessité de tester chaque caractère et d'éclater l'ensemble ;-\
À moins que tu nous dégotes une regex d'excellence digne de ce nom ;-) -
@zipe31les lettres qui composent le mot doivent être dans un intervalle donné : entre A et H, par exemple.
si le seul souci est le nombre de caractères "limitant" :$ mot=ABCD $ re="^[A-H]{${#mot}}\$" $ [[ $mot =~ $re ]]; echo $?il n'est pas dit qu'il faut indiquer quel caractère est erroné. Là, simplement, on dit que le mot est valide, ou pas.
sinon, en effet, il faut "éclater" le mot.
-