Rechercher : dans
Par :

Script shell unix

Dernière réponse le 13 aoû 2008 à 10:43:19 simo, le 11 aoû 2008 à 13:39:37 
 Signaler ce message aux modérateurs

Bonjour,
Mon problème est comme suit: J'ai un prompt invitant l'utilisateur à faire son choix parmi plusieurs choix lus à partir d'un fichier, je voudrai limiter le choix de l'utilisateur à seulement et seulement deux choix et récupérer en paramètres les choix choisis.

Exemple :

1. Couleur : verte Code : 1
2. Couleur : jaune Code : 2
3. Couleur : rouge Code : 3

Votre choix :

Les paramètres (verte, 1) et (jaune, 2) et (rouge,3) représente lors de l'affichage les paramètres $2 et $4.
Si l'utilisateur choisit les options 1 et 3 un tableau tab[i] devrait se remplir avec les paramètres (verte,1,rouge,3)
Le choix doit se limiter à deux choix obligatoireemnt : exemple : 1,3 ou 1,2 ou 2,3

Merci d'avance pour votre aide.

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Script shell unix » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha-Bang Premièrement,...
Guide d'utilisation du Shell pour débutant VoirSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface...

1

fiddy, le 11 aoû 2008 à 14:56:10

Salut
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
Google is your friend

Répondre à fiddy

2

simo, le 11 aoû 2008 à 15:44:18

C'est pas trés claire, j'ai pas saisi le but de ton script à part le fait de (1,2) ou autre :(

Répondre à simo

3

fiddy, le 11 aoû 2008 à 15:55:32

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
Google is your friend

Répondre à fiddy

4

simo, le 11 aoû 2008 à 16:06:25

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 :(

Répondre à simo

5

simo, le 11 aoû 2008 à 16:18:18

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)

Répondre à simo

6

simo, le 11 aoû 2008 à 17:24:19

Résultat attendu au niveau du tableau pour le choix 1,3 par exemple :

tab=verte,1,rouge,3

Merci d'avance.

Répondre à simo

7

jipicy, le 11 aoû 2008 à 18:19:51

Salut,

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]}"
;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

8

simo, le 12 aoû 2008 à 09:48:40

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 :)

Répondre à simo

9

simo, le 12 aoû 2008 à 11:04:10

Le read -a ne marche pas en korn shell :(

Répondre à simo

10

simo, le 12 aoû 2008 à 14:44:48

Salut jipicy :)
tu peux m'aider stp?

Répondre à simo

11

fiddy, le 12 aoû 2008 à 15:27:32

Re,
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]}


Google is your friend

Répondre à fiddy

12

simo, le 12 aoû 2008 à 16:22:36

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

Répondre à simo

13

simo, le 12 aoû 2008 à 17:13:05

Ss bloqué :(

Répondre à simo

14

jipicy, le 12 aoû 2008 à 17:15:05

Ben je bloque aussi en ksh ;-((
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

15

simo, le 12 aoû 2008 à 17:20:47

J'ai bon essayé de chercher mais je ne trouve pas l'équivalent du read -a en korn shell :(

Répondre à simo

16

fiddy, le 12 aoû 2008 à 17:46:00

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 ^^).
Google is your friend

Répondre à fiddy

17

fiddy, le 12 aoû 2008 à 18:30:20

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 ;)

#! /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]}


Google is your friend

Répondre à fiddy

18

simo, le 13 aoû 2008 à 09:11:40

Merci bcp fiddy, ça marche :)

Répondre à simo

19

simo, le 13 aoû 2008 à 09:15:11

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]$//")

Répondre à simo

20

fiddy, le 13 aoû 2008 à 10:10:37

C'est expliqué plus haut ;)
http://www.commentcamarche.net/forum/affich 7844035 script shell unix#3
Google is your friend

Répondre à fiddy
Collection CommentÇaMarche.net