OVH Cloud OVH Cloud

recuperer un parametre dans un menu

9 réponses
Avatar
dorisnemo
Bonjour,

j'ai un menu standard
ex:
case $choix in
1) cat hostPROD.lst |more ; echo press enter ; read DUMMY
;;
2) fctlsusergene
;;
3) fctlsgrpgene
;;
4) fctgetUgeneric
;;
5) echo entree parametre ${param1} ; read DUMMY

Voil=E0 je souhaite quand je tape la ligne 5 r=E9cuperer en parametre un
hostname qui permettra de lancer une fonction qui fait par exemple un
"ls" sur le hostname passe en param=E8tre.

Merci de votre retour
DorisNemo

9 réponses

Avatar
lhabert
Bein read, justement.
Avatar
dorisnemo
désolé Luc je ne comprends pas ta réponse !
ma variable n'est pas renseigné.
quand je tape le choix 5 avec une valeur la variable n'est pas
initialisé param1=$1
Avatar
Jean-Marc DURO
désolé Luc je ne comprends pas ta réponse !
ma variable n'est pas renseigné.
quand je tape le choix 5 avec une valeur la variable n'est pas
initialisé param1=$1

J'ai du mal à saisir. Dans ton script, lors du choix 5 tu va renseigner

une variable de nom DUMMY. A aucun moment, tu n'as affecté de valeur à
la variable param1.

$1 est un paramètre de ligne de commande, passé au lancement du script.
Si tu veux que param1 prenne la valeur de ce paramètre lors du choix 5,
il te suffit d'écrire: param1=$1 dans la branche 5 du case.

Cordialement

Jean-Marc

Avatar
Laurent
5) echo entree parametre ${param1} ; read DUMMY


Si tu faisais :

5) read param1 ; echo entree parametre ${param1}

ça fonctionnerait beaucoup mieux.. ;)

Avatar
dorisnemo
merci de ton retour, voici comment j'ai fait grace à ta réponse sur
le read

9)
read MACHINE?"Entrer le nom de la machine = "
echo "le nom entré est ${MACHINE}"
read VALIDATION?"Validez vous le choix oui/non: "
fctread
;;

ainsi ma fonction récupère le paramètre et peux executer ma commande
Gérald
Avatar
Stephane Chazelas
On 3 May 2006 03:13:06 -0700, dorisnemo wrote:
merci de ton retour, voici comment j'ai fait grace à ta réponse sur
le read

9)
read MACHINE?"Entrer le nom de la machine = "
echo "le nom entré est ${MACHINE}"
read VALIDATION?"Validez vous le choix oui/non: "
fctread
;;

ainsi ma fonction récupère le paramètre et peux executer ma commande
[...]


Note que read 'var?prompt' est specifique a ksh/zsh (et tu as
oublié de mettre ? qui est un charactere special au shell entre
quotes).

La syntaxe standard est:

printf 'Entrer le nom de la machine = '
read MACHINE

Note que sans -r, read considere "" comme un caractere
d'echappement (pour le separateur, pour le saut de ligne (et
pour lui-meme). read va aussi supprimer les blanks en debut et
fin (a moins qu'IFS ait ete modifié).

En gros si tu entres " <Tab>toto ti<NL>ti ", MACHINE
contiendra: "toto titi". Change en IFS= read -r MACHINE si ce
n'est pas ce que tu veux.

--
Stephane

Avatar
Jean-Marc DURO
merci de ton retour, voici comment j'ai fait grace à ta réponse sur
le read

9)
read MACHINE?"Entrer le nom de la machine = "
echo "le nom entré est ${MACHINE}"
read VALIDATION?"Validez vous le choix oui/non: "
fctread
;;

ainsi ma fonction récupère le paramètre et peux executer ma commande
Gérald

C'est dans fctread que tu traites la réponse à la validation du choix ?


Jean-Marc

Avatar
dorisnemo
non la validation je l'ai ajouter ensuite de la manière suivante :

###############
read VALIDATION?"Validez vous le choix oui/non: "
if [[ ${VALIDATION} = oui ]]
then
fctfindrepnormes
elif [[ ${VALIDATION} = non ]]
then
clear ; echo "nnntttt OPERATION ANNULEE (appuyer sur entree)" ;
read DUMMY
else
badchoice
fi
;;
##########################

merci Stephane pour ton retour, je vais modifier mon script en
conséquence.
Gérald
Avatar
Stephane Chazelas
2006-05-4, 00:54(-07), dorisnemo:
non la validation je l'ai ajouter ensuite de la manière suivante :

###############
read VALIDATION?"Validez vous le choix oui/non: "
if [[ ${VALIDATION} = oui ]]
then
fctfindrepnormes
elif [[ ${VALIDATION} = non ]]
then
clear ; echo "nnntttt OPERATION ANNULEE (appuyer sur entree)" ;
read DUMMY
else
badchoice
fi
;;
##########################

merci Stephane pour ton retour, je vais modifier mon script en
conséquence.
[...]


Tu peux remplacer les

if [[ $VALIDATION = oui ]]

par des

if [ "$VALIDATION" = oui ]

tant que tu y es.

ou encore mieux:

case $VALIDATION in
oui | yes | o | y) ...;;
non | no | n) ...;;
esac

Et echo par printf. echo "nt" ne marchera pas avec tous les
shells. En particulier, avec ksh, ca depend de beaucoup de
choses. Le meme script, avec le meme shell peut cesser de
marcher du jour au lendemain, ou peut marcher avec certains
utilisateurs et pas avec d'autres. Il est recommandé (par POSIX
notemment) de laisser tomber echo et d'utiliser "printf" a la
place.

Note que si tu lance "read" sans argument, c'est equivalent a
"read REPLY".


--
Stéphane