#1 Le 27/10/2020, à 17:16
- Smwa
[RESOLU] - Bash - une variable comme paramètre de case esac ?
Bonjouuuur !!!
C'est encore moi....
J'ai une nouvelle question pour laquelle je ne trouve pas de solution.
Je cherche à généraliser un case. Lorsque j'entre la valeur en dur devant le ) cela fonctionne parfaitement, mais si je stocke cette valeur dans une variable cela ne fonctionne plus et je ne comprends pas pourquoi.
Comme toujours, un exemple sera plus parlant.
Ceci fonctionne parfaitement
var="choix5"
case "$choix" in
choix1 | choix2 | choix3 | choix4)
commande ;;
$var)
commande ;;
*)
commande ;;
esac
Et celui ci ne fonctionne pas....
var1="choix1 | choix2 | choix3 | choix4"
var2="choix5"
case "$choix" in
$var1)
commande ;;
$var2)
commande ;;
*)
commande ;;
esac
J'imagine que ça peut être à cause du | dans la variable ?
Je ne parviens pas à comprendre pourquoi en dur ça passe et pas en variable.
Auriez-vous une indication s'il vous plait ?
Merci et bonne soirée à tous !!
Dernière modification par Smwa (Le 28/10/2020, à 10:02)
Hors ligne
#2 Le 27/10/2020, à 17:57
- Hizoka
Re : [RESOLU] - Bash - une variable comme paramètre de case esac ?
Bonjour, ça fonctionne avec var2.
Pourquoi pas avec var1 ?
Car c'est comme si tu écrivais :
case "$choix" in
"choix1 | choix2 | choix3 | choix4")
commande ;;
"choix5")
commande ;;
*)
commande ;;
esac
De ce fait, il ne considère var1 que comme un "mot".
Il semble plus que compliqué d'utiliser un tableau comme paramètre si ce n'est impossible.
Tu peux partir sur ça sinon :
declare -A var
var=([choix1]=1 [choix2]=2 [choix3]=3 [choix4]=4 [choix5]=5)
choix="choix4"
case "${var[${choix}]}" in
1|2|3|4) echo 1;;
5) echo 2;;
*) echo autre;;
esac
Dernière modification par Hizoka (Le 27/10/2020, à 18:04)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 27/10/2020, à 18:07
- Smwa
Re : [RESOLU] - Bash - une variable comme paramètre de case esac ?
Merci pour ta réponse !!
aie...ça me semble compromis alors..
En fait ce que je voudrai faire c'est quelque chose comme cela, pour ne pas avoir X fois la répétition du case si je dois l'appliquer par exemple sur 20 cas différents.
fonctionChoix()
{
case "$choix" in
$var1)
commande ;;
$var2)
commande ;;
*)
commande ;;
esac
}
#cas 1
var1="choix1 | choix2 | choix3 | choix4"
var2="choix5"
fonctionChoix
#cas 2
var1="choix1 | choix2 | choix3"
var2="choix4"
fonctionChoix
#cas 3
var1="choix1 | choix2 "
var2="| choix3 | choix4 | choix5"
fonctionChoix
Est-ce réalisable ?
Dernière modification par Smwa (Le 27/10/2020, à 18:08)
Hors ligne
#4 Le 27/10/2020, à 18:39
- Hizoka
Re : [RESOLU] - Bash - une variable comme paramètre de case esac ?
Je ferais un truc du genre :
fonctionChoix()
{
if [[ $var1 == *"$choix"* ]]
then
echo "commande 1"
elif [[ $var2 == *"$choix"* ]]
then
echo "commande 2"
else
echo "commande autre"
fi
}
choix="choix4"
#cas 1
var1="choix1 | choix2 | choix3 | choix4"
var2="choix5"
fonctionChoix
#cas 2
var1="choix1 | choix2 | choix3"
var2="choix4"
fonctionChoix
#cas 3
var1="choix1 | choix2 "
var2="| choix3 | choix4 | choix5"
fonctionChoix
Par contre si le choix est choix1 et que dans les réponses il y a choix10, il pourrait être validé.
Si tu veux un mot, tu peux passer par grep aussi
if grep -qw "$choix" <<< "$var1"
ou en fullbash (beaucoup plus rapide) :
if [[ $var1 =~ (^|[[:space:]])${choix}($|[[:space:]]) ]]
Dernière modification par Hizoka (Le 27/10/2020, à 18:55)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 28/10/2020, à 10:02
- Smwa
Re : [RESOLU] - Bash - une variable comme paramètre de case esac ?
Bonjour,
merci beaucoup pour ton aide !!
Je cherche toujours à faire des case esac alors qu'avec le if c'est en effet plus fonctionnel !!
J'ai réussi à faire quelque chose qui me convient à partir de ton aide. Encore merci !!
Bonne journée
Hors ligne