#1 Le 14/04/2010, à 16:02
- bece
[résolu] Quelque chose de plus propre qu'une suite d'elif
Bonjour,
Voila, je me demandais s'il y avait quelque chose de plus propre qu'une suite d'elif :
if [ $1 -eq 1 ]; then let "jour = 1"
elif [ $1 -eq 2 ]; then let "jour = 2"
elif [ $1 -eq 3 ]; then let "jour = 3"
elif [ $1 -eq 4 ]; then let "jour = 4"
elif [ $1 -eq 5 ]; then let "jour = 5"
elif [ $1 -eq 6 ]; then let "jour = 6"
elif [ $1 -eq 7 ]; then let "jour = 7"
elif [ $1 -eq 8 ]; then let "jour = 8"
elif [ $1 -eq 9 ]; then let "jour = 9";fi
Dans ce cas le 'case' ne fonctionne pas car l'utilisateur peur rentrer 1 comme 01 ou même 000001.
Merci d'avance
Dernière modification par bece (Le 15/04/2010, à 09:08)
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#2 Le 14/04/2010, à 16:05
- sputnick
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
case $variable in
0) jour=0 ;;
1) jour=1 ;;
2) jour=2 ;;
*) echo >&2 "autres cas" ;;
esac
S'il te plait, laisse let à tes ancetres, en 2010 on utilise plus ça.
Cherche /\(\( dans man bash ( copie colle àa dans le man ).
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 14/04/2010, à 16:07
- Tenshy
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
peut-être d'abord faire un traitement sur $1 pour retirer les 0 inutiles en début et en fin et après tu peux faire un case
Hors ligne
#4 Le 14/04/2010, à 16:14
- bece
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
S'il te plait, laisse let à tes ancetres, en 2010 on utilise plus ça.
Si tu le dis
Par contre pour le 'case', j'ai déjà essayé, ça ne fonctionne pas justement à cause des 00 potentiels.
peut-être d'abord faire un traitement sur $1 pour retirer les 0 inutiles en début et en fin et après tu peux faire un case
Hum, au final, ça risque d'être plus lourd qu'une suite d'elif, non ?
Dernière modification par bece (Le 14/04/2010, à 16:15)
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#5 Le 14/04/2010, à 16:24
- Postmortem
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Pour prendre en compte le cas où on tape 1, 01, 00001 ou 00000000001 etc... :
case $variable in
+(0) ) jour=0;;
*(0)1 ) jour=1;;
*(0)2 ) jour=2;;
*(0)3 ) jour=3;;
*) echo "Mauvais choix";;
esac
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 14/04/2010, à 16:27
- Tenshy
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Hum, au final, ça risque d'être plus lourd qu'une suite d'elif, non ?
oui plus lourd en effet... mais plus propre... après selon la taille du programme ca va être plutôt négligeable. Et comme ca tu peux réutiliser ta variable si tu en as encore besoin, mais il est vrai que si c'est juste pour la partie de code que tu as donné ca va l'alourdir pour rien.
Après tout dépend de ce pour quoi te sers de ta variable.
Hors ligne
#7 Le 14/04/2010, à 16:46
- bece
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
@ Tenshy : C'est un tout petit script (50 lignes avec les commentaires)
Après j'utilise ma variable pour faire des recherches.
@ Postmortem : Je ne connaissais pas cette subtilité du case . Merci
Après test, j'ai le droit à une belle erreur :
./script.sh: line 53: syntax error near unexpected token `('
./script.sh: line 53: ` *(0)1) jour=1;;'
Et le code :
case $1 in
*(0)1 ) jour=1;;
*(0)2 ) jour=2;;
*(0)3 ) jour=3;;
*(0)4 ) jour=4;;
*(0)5 ) jour=5;;
*(0)6 ) jour=6;;
*(0)7 ) jour=7;;
*(0)8 ) jour=8;;
*(0)9 ) jour=9;;
*) help 0;;
esac
Dernière modification par bece (Le 14/04/2010, à 16:49)
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#8 Le 14/04/2010, à 16:49
- Totor
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Bonjour,
Je dirais "tout simplement" comme ceci :
[[ ${variable} =~ [[:digit:]]+ ]] && jour=$((10#${variable}))
-- Lucid Lynx --
Hors ligne
#9 Le 14/04/2010, à 16:57
- Postmortem
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Oups, ça fonctionne en ksh (je suis au taf et on utilise du ksh)
Je viens d'essayer en bash et en effet, j'ai la même erreur.
C'est bizarre car dans le man de bash sur mon serveur, on voit apparaître ces constructions (dans le paragraphe 'Pattern Matching')
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#10 Le 14/04/2010, à 17:05
- bece
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
@Totor : j'ai pas tout compris
@Postmortem : Oui, je viens de regarder, mais c'est pas marqué qu'on peut l'appliquer au conditions (enfin, si ça se trouve c'est marqué mais bon je ne suis pas encore bilingue^^).
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#11 Le 14/04/2010, à 17:15
- Totor
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Explications :
[[ ${variable} =~ [[:digit:]]+ ]] : Si ${variable} ne contient que des chiffres (et au moins 1).
10#${variable} : En bash, il est possible d'exprimer des nombres en précisant leur base via la notation [base#]nombre. ici, c'est la base 10 (décimal).
$((10#${variable})) : "Evaluation" de 10#${variable}. Cela permet de supprimer les "0" se trouvant en début de nombre. Il est impératif de préciser la base car si un nombre commence par 0, il est considéré comment étant exprimé en hoctal.
Dernière modification par Totor (Le 14/04/2010, à 17:17)
-- Lucid Lynx --
Hors ligne
#12 Le 14/04/2010, à 17:28
- bece
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Merci pour les expliquations, est-ce que le [[:digit:]] est égale au [0-9] ?
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#13 Le 14/04/2010, à 20:15
- Totor
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Oui
-- Lucid Lynx --
Hors ligne
#14 Le 15/04/2010, à 11:19
- Hizoka
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
totor et ses commandes de brutes
en tout cas, je mets de coté ce code
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#15 Le 15/04/2010, à 11:24
- bece
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
^^ En tout cas merci, c'est excellent quelque chose qui faisait plusieurs lignes se fait maintenant en une ligne
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#16 Le 28/04/2010, à 14:04
- Postmortem
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Merci Totor pour ta commande, elle m'a bien aidé !
Néanmoins, j'ai une petite remarque sur le test.
[[ ${variable} =~ [[:digit:]]+ ]] : cette commande vérifie qu'il y a des chiffres mais s'il y a des chiffres et des lettres, la condition est aussi vraie.
Petit exemple :
# variable=33gdf
# [[ ${variable} =~ [[:digit:]]+ ]] && echo "Que des chiffres" || echo "Autre chose"
Que des chiffres
Pour vérifier qu'il n'y a que des chiffres : [[ ${variable} =~ ^[[:digit:]]+$ ]]
# variable=33gdf
# [[ ${variable} =~ ^[[:digit:]]+$ ]] && echo "Que des chiffres" || echo "Autre chose"
Autre chose
#
# variable=0546
# [[ ${variable} =~ ^[[:digit:]]+$ ]] && echo "Que des chiffres" || echo "Autre chose"
Que des chiffres
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#17 Le 28/04/2010, à 15:11
- Hizoka
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
[[ ${variable} =~ ^[[:digit:]]*$ ]] && echo "Que des chiffres" || echo "Autre chose"
fonctionne aussi
Dernière modification par Hizoka (Le 28/04/2010, à 15:21)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#18 Le 28/04/2010, à 15:30
- Postmortem
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Oui mais non !! lol
Cette condition est vraie pour la chaîne vide :
# variable=
# [[ ${variable} =~ ^[[:digit:]]*$ ]] && echo "Que des chiffres" || echo "Autre chose"
Que des chiffres
Alors que :
# variable=
# [[ ${variable} =~ ^[[:digit:]]+$ ]] && echo "Que des chiffres" || echo "Autre chose"
Autre chose
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne