Script shell unix
Résolu/Fermé
simo
-
11 août 2008 à 13:39
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 13 août 2008 à 10:43
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 13 août 2008 à 10:43
A voir également:
- Script shell unix
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Microsoft activation script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
21 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 août 2008 à 14:56
11 août 2008 à 14:56
Salut
Essaie :
Cdt
Essaie :
#! /bin/sh a=null while [ "$a" ] || [ ! "$choix" ]; do echo "choix:" read "choix" a=$(echo $choix | sed 's/[1-3],[1-3]//') done echo "bravo"
Cdt
c'est pas trés claire, j'ai pas saisi le but de ton script à part le fait de (1,2) ou autre :(
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 août 2008 à 15:55
11 août 2008 à 15:55
Bah mon script répond à tes besoins ^^.
Grosso modo, ça demande le choix a l'utilisateur. Ensuite, la réponse de l'utilisateur va passer dans sed, et effacer toutes les réponses de la forme "[1-3],[1-3]" ([1-3]= n'importe quel chiffre entre 1 et 3 compris). Et on stocke le résultat dans la variable $a.
A ce stade, si $a vaut "", c'est que la réponse est bien de la forme que tu voulais.
Cdt
Grosso modo, ça demande le choix a l'utilisateur. Ensuite, la réponse de l'utilisateur va passer dans sed, et effacer toutes les réponses de la forme "[1-3],[1-3]" ([1-3]= n'importe quel chiffre entre 1 et 3 compris). Et on stocke le résultat dans la variable $a.
A ce stade, si $a vaut "", c'est que la réponse est bien de la forme que tu voulais.
Cdt
Oui fiddy, il répond en parti à mon besoin. il répond juste au choix du type (x,y) mais il reste la partie stockage des paramètres en tableau :(
Est ce qu'il est possible de faire un choix de 1 u type (1) ou (3) .. ou de 2 choix dy type (1,2) ou (1,7) ... et que ca ne soit pas limité au nombre 3 (çad limité le choix aux nombres entiers)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Résultat attendu au niveau du tableau pour le choix 1,3 par exemple :
tab=verte,1,rouge,3
Merci d'avance.
tab=verte,1,rouge,3
Merci d'avance.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
11 août 2008 à 18:19
11 août 2008 à 18:19
Salut,
Et ça, ça ta va ?
Et ça, ça ta va ?
./foo.sh Choisissez 2 couleurs : 1. Couleur : verte Code : 1 2. Couleur : jaune Code : 2 3. Couleur : rouge Code : 3 2 Mauvais choix, 2 couleurs seulement doivent être choisies... Recommencez s'il vous plaît. Choisissez 2 couleurs : 1. Couleur : verte Code : 1 2. Couleur : jaune Code : 2 3. Couleur : rouge Code : 3 3 1 Deux couleurs ont été choisies ;-)) tableau = rouge 3 verte 1 1ère valeur tableau = rouge 2ème valeur tableau = 3 3ème valeur tableau = verte 4ème valeur tableau = 1 [tmpfs]$Le script :
#! /bin/bash set "verte 1" "jaune 2" "rouge 3" while : do echo echo "Choisissez 2 couleurs :" echo echo "1. Couleur : verte Code : 1 2. Couleur : jaune Code : 2 3. Couleur : rouge Code : 3" echo read -a color if [ "${#color[*]}" != "2" ] then echo echo "Mauvais choix, 2 couleurs seulement doivent être choisies..." echo "Recommencez s'il vous plaît." echo continue else break fi done echo echo "Deux couleurs ont été choisies ;-))" echo tableau=( $(eval echo \$${color[0]} \$${color[1]}) ) echo "tableau = ${tableau[*]}" echo "1ère valeur tableau = ${tableau[0]}" echo "2ème valeur tableau = ${tableau[1]}" echo "3ème valeur tableau = ${tableau[2]}" echo "4ème valeur tableau = ${tableau[3]}";-))
Bonjour jipicy,
merci pour la solution :). Est il possible de rendre le choix comme suit : 1,2 (virgule au lieu de l'espace)? et de donner la possiblité à l'utilisateur de faire 1 ou 2 choix seulement?
exemple :
Choisissez couleurs :
1. Couleur : verte Code : 1
2. Couleur : jaune Code : 2
3. Couleur : rouge Code : 3
1
Bon choix
Choisissez couleurs :
1. Couleur : verte Code : 1
2. Couleur : jaune Code : 2
3. Couleur : rouge Code : 3
1,3
Bon choix
Choisissez couleurs :
1. Couleur : verte Code : 1
2. Couleur : jaune Code : 2
3. Couleur : rouge Code : 3
1,3,2
Mauvais choix
Merci d'avance :)
merci pour la solution :). Est il possible de rendre le choix comme suit : 1,2 (virgule au lieu de l'espace)? et de donner la possiblité à l'utilisateur de faire 1 ou 2 choix seulement?
exemple :
Choisissez couleurs :
1. Couleur : verte Code : 1
2. Couleur : jaune Code : 2
3. Couleur : rouge Code : 3
1
Bon choix
Choisissez couleurs :
1. Couleur : verte Code : 1
2. Couleur : jaune Code : 2
3. Couleur : rouge Code : 3
1,3
Bon choix
Choisissez couleurs :
1. Couleur : verte Code : 1
2. Couleur : jaune Code : 2
3. Couleur : rouge Code : 3
1,3,2
Mauvais choix
Merci d'avance :)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
12 août 2008 à 15:27
12 août 2008 à 15:27
Re,
Petit arrangement du script de jipicy et hop, ce script devrait te convenir ;)
Petit arrangement du script de jipicy et hop, ce script devrait te convenir ;)
#! /bin/bash corresp[1]=verte corresp[2]=jaune corresp[3]=rouge a=null b=null while : do echo echo "Choisissez 2 couleurs :" echo echo "1. Couleur : verte Code : 1" echo "2. Couleur : jaune Code : 2" echo "3. Couleur : rouge Code : 3" echo read couleur a=$(echo $couleur | sed 's/^[1-3],[1-3]$//') b=$(echo $couleur | sed 's/^[1-3]$//') if [ ! "$b" ] && [ "$couleur" ] then tableau[1]=${couleur:0:1} tableau[0]=${corresp[${tableau[1]}]} break elif [ ! "$a" ] && [ "$couleur" ] then tableau[1]=${couleur:0:1} tableau[0]=${corresp[${tableau[1]}]} tableau[3]=${couleur:2:1} tableau[2]=${corresp[${tableau[3]}]} break else echo "Mauvais choix, 1 ou 2 couleurs seulement doivent être choisies..." echo "Recommencez s'il vous plaît." echo fi done echo "tableau = ${tableau[*]}" echo "1ère valeur tableau = ${tableau[0]}" echo "2ème valeur tableau = ${tableau[1]}" echo "3ème valeur tableau = ${tableau[2]}" echo "4ème valeur tableau = ${tableau[3]}
Le tableau ne devrait pas être limité par sa taille, il n'y a pas que 3 choix mais plusieurs.
J'ai l'erreur suivante lors de l'execution en korn shell.
tableau[1]=${couleur:0:1}: bad substitution
Merci d'avance
J'ai l'erreur suivante lors de l'execution en korn shell.
tableau[1]=${couleur:0:1}: bad substitution
Merci d'avance
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
12 août 2008 à 17:15
12 août 2008 à 17:15
Ben je bloque aussi en ksh ;-((
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
12 août 2008 à 17:46
12 août 2008 à 17:46
Salut,
Dans ma version, je n'utilise pas read -a ;)
Remplace tableau[1]=${couleur:0:1} par tableau[1]=$(echo ${tableau[1]} | sed 's/\([1-3]\)/\1/')
(Oui, je sais, c'est un peu bourrin ^^).
Dans ma version, je n'utilise pas read -a ;)
Remplace tableau[1]=${couleur:0:1} par tableau[1]=$(echo ${tableau[1]} | sed 's/\([1-3]\)/\1/')
(Oui, je sais, c'est un peu bourrin ^^).
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
12 août 2008 à 18:30
12 août 2008 à 18:30
Re,
Voilà ton code arrangé. Tu peux modifier les couleurs en début. L'utilisateur ne peut mettre qu'une ou deux couleurs parmi celles définies. Normalement, ce code devrait marcher aussi en korn shell ;)
Voilà ton code arrangé. Tu peux modifier les couleurs en début. L'utilisateur ne peut mettre qu'une ou deux couleurs parmi celles définies. Normalement, ce code devrait marcher aussi en korn shell ;)
#! /bin/bash #A changer corresp[1]=verte corresp[2]=jaune corresp[3]=rouge corresp[4]=noir ## nbCouleur=${#corresp[*]} a=null b=null while : do i=1 while [ $i -le $nbCouleur ]; do echo "$i : ${corresp[$i]}" i=$(($i+1)) done echo read couleur a=$(echo $couleur | sed "s/^[1-$nbCouleur],[1-$nbCouleur]$//") b=$(echo $couleur | sed "s/^[1-$nbCouleur]$//") choix=$(echo $couleur | sed "s/,\([1-$nbCouleur]\)/ \1/g") if [ ! "$b" ] && [ "$couleur" ] then tableau[1]=$(echo $choix | cut -d' ' -f1) tableau[0]=${corresp[${tableau[1]}]} break elif [ ! "$a" ] && [ "$couleur" ] then tableau[1]=$(echo $choix | cut -d' ' -f1) tableau[0]=${corresp[${tableau[1]}]} tableau[3]=$(echo $choix | cut -d' ' -f2) tableau[2]=${corresp[${tableau[3]}]} break else echo "Recommencez s'il vous plaît." echo fi done echo "tableau = ${tableau[*]}" echo "1ère valeur tableau = ${tableau[0]}" echo "2ème valeur tableau = ${tableau[1]}" echo "3ème valeur tableau = ${tableau[2]}" echo "4ème valeur tableau = ${tableau[3]}
Est ce que tu peux me commenter juste un peu le script pour que puisse le comprendre d'avantage :) surtout ces deux lignes
a=$(echo $couleur | sed "s/^[1-$nbCouleur],[1-$nbCouleur]$//")
b=$(echo $couleur | sed "s/^[1-$nbCouleur]$//")
a=$(echo $couleur | sed "s/^[1-$nbCouleur],[1-$nbCouleur]$//")
b=$(echo $couleur | sed "s/^[1-$nbCouleur]$//")
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
13 août 2008 à 10:10
13 août 2008 à 10:10
C'est expliqué plus haut ;)
http://www.commentcamarche.net/forum/affich 7844035 script shell unix#3
http://www.commentcamarche.net/forum/affich 7844035 script shell unix#3