#1 Le 14/04/2010, à 17:02
[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";fiDans 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, à 10:08)
http://www.jeremychevrier.com/ -> un jour j'aurai le courage de le réouvrir !
Toshiba Satellite L550-13U - Dual Core T4300 -> Fedora 16
http://www.makinamania.com
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#2 Le 14/04/2010, à 17:05
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" ;;
esacS'il te plait, laisse let à tes ancetres, en 2010 on utilise plus ça.
Cherche /\(\( dans man bash ( copie colle àa dans le man ).
bashfr.org(random);
* xBosse s'est encore déchiré le cul au sopalin, l'est vraiment temps d'acheter du PQ !! :-O
Hors ligne
#3 Le 14/04/2010, à 17:07
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, à 17:14
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, à 17:15)
http://www.jeremychevrier.com/ -> un jour j'aurai le courage de le réouvrir !
Toshiba Satellite L550-13U - Dual Core T4300 -> Fedora 16
http://www.makinamania.com
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#5 Le 14/04/2010, à 17:24
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";;
esacPrecise Pangolin (64 bits), Athlon64 3800+, ATI Radeon HD4870
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 14/04/2010, à 17:27
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, à 17:46
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;;
esacDernière modification par bece (Le 14/04/2010, à 17:49)
http://www.jeremychevrier.com/ -> un jour j'aurai le courage de le réouvrir !
Toshiba Satellite L550-13U - Dual Core T4300 -> Fedora 16
http://www.makinamania.com
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#8 Le 14/04/2010, à 17:49
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, à 17:57
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')
Precise Pangolin (64 bits), Athlon64 3800+, ATI Radeon HD4870
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#10 Le 14/04/2010, à 18:05
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^^).
http://www.jeremychevrier.com/ -> un jour j'aurai le courage de le réouvrir !
Toshiba Satellite L550-13U - Dual Core T4300 -> Fedora 16
http://www.makinamania.com
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#11 Le 14/04/2010, à 18:15
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, à 18:17)
-- Lucid Lynx --
Hors ligne
#12 Le 14/04/2010, à 18:28
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] ?
http://www.jeremychevrier.com/ -> un jour j'aurai le courage de le réouvrir !
Toshiba Satellite L550-13U - Dual Core T4300 -> Fedora 16
http://www.makinamania.com
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#13 Le 14/04/2010, à 21:15
Re : [résolu] Quelque chose de plus propre qu'une suite d'elif
Oui
-- Lucid Lynx --
Hors ligne
#14 Le 15/04/2010, à 12:19
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 ![]()
Kubuntu v64 13.04 -- ATI HD4850
Générateur de fenêtres Zenity -- GUI d'extraction de piste de fichier mkv -- Generateur de code de screencast
Hors ligne
#15 Le 15/04/2010, à 12:24
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 ![]()
http://www.jeremychevrier.com/ -> un jour j'aurai le courage de le réouvrir !
Toshiba Satellite L550-13U - Dual Core T4300 -> Fedora 16
http://www.makinamania.com
"L'informatique, c'est l'art de passer 15 jours à gagner 5 millisecondes"
Hors ligne
#16 Le 28/04/2010, à 15:04
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 chiffresPour 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 chiffresPrecise Pangolin (64 bits), Athlon64 3800+, ATI Radeon HD4870
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#17 Le 28/04/2010, à 16:11
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, à 16:21)
Kubuntu v64 13.04 -- ATI HD4850
Générateur de fenêtres Zenity -- GUI d'extraction de piste de fichier mkv -- Generateur de code de screencast
Hors ligne
#18 Le 28/04/2010, à 16:30
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 chiffresAlors que :
# variable=
# [[ ${variable} =~ ^[[:digit:]]+$ ]] && echo "Que des chiffres" || echo "Autre chose"
Autre chosePrecise Pangolin (64 bits), Athlon64 3800+, ATI Radeon HD4870
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
Pages : 1
- Accueil
- » Forum
- » Terminal, scripts et ligne de commande
- » [résolu] Quelque chose de plus propre qu'une suite d'elif