Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2976 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Script shell et menu

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script shell et menu

n°1781033
spamoi
Posté le 01-09-2008 à 16:17:45  profilanswer
 

Bonjour,
 
comment faire une menu en shell qui me permet de valider une réponse avec seulement 2 choix possible ?  
 
Exemple:
1) je pose un question l'utilisateur DOIT répondre par "o" ou "n"
2) je stock la réponse dans une variable
3) si la réponse est égale à "o" ou "n" je continue l'éxecution du script, mais si ce n'est pas "o" ou "n" je reboucle sur le menu pour reposer la question.
 
 
J'ai tenter avec un until [...], j'arrive à tester une réponse, mais pas 2  :sweat:  
 
 
Merci pour votre aide !
 
 :hello:

mood
Publicité
Posté le 01-09-2008 à 16:17:45  profilanswer
 

n°1781051
olivthill
Posté le 01-09-2008 à 16:51:22  profilanswer
 

Quel shell ?
 
- Dos avec .bat ? et si oui, quelle version ?
- Vbscript ?
- Unix sh ? ksh ? csh ? bash ?
- Autre ?

n°1781055
spamoi
Posté le 01-09-2008 à 16:53:54  profilanswer
 

Arf, autant pour moi, j'avais tellement la tête dans mon shell :)
 
Alors c'est pour un shell en bash.
 
Merci ;)

n°1781169
matafan
Posté le 01-09-2008 à 21:55:13  profilanswer
 

Par exemple :

#!/bin/sh
 
OPT=
 
while [[ $OPT != 'y' ]] && [[ $OPT != 'n' ]]
do
        echo -n "Question (y/n) "
        read OPT
done
 
echo $OPT

n°1781200
spamoi
Posté le 01-09-2008 à 22:46:45  profilanswer
 

matafan a écrit :

Par exemple :

#!/bin/sh
 
OPT=
 
while [[ $OPT != 'y' ]] && [[ $OPT != 'n' ]]
do
        echo -n "Question (y/n) "
        read OPT
done
 
echo $OPT



 
 
Merci bien matafan !!! il me manquais la syntaxe qui imbrique le deuxième contrôle...  :hello:

n°1783278
Sve@r
Posté le 05-09-2008 à 19:51:26  profilanswer
 

matafan a écrit :

Par exemple :

#!/bin/sh
 
OPT=
 
while [[ $OPT != 'y' ]] && [[ $OPT != 'n' ]]
do
        echo -n "Question (y/n) "
        read OPT
done
 
echo $OPT



while [ "$OPT" != "y"  -a "$OPT" != "n" ]    => un seul appel à test au lieu de 2 et les guillemets protègent du cas "variable OPT vide quand on ne rentre rien"


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1783318
matafan
Posté le 05-09-2008 à 22:00:28  profilanswer
 

"[[ expr ]]" c'est un mot clée du shell, ça n'a rien à voir avec test. C'est "[ expr ]" qui est équivalent à test. Et avec "[[", ça marche même si OPT est vide (ce qui n'est pas le cas avec "[", comme tu le souligne).

n°1783338
Sve@r
Posté le 06-09-2008 à 08:24:47  profilanswer
 

matafan a écrit :

"[[ expr ]]" c'est un mot clé du shell, ça n'a rien à voir avec test.


Exact. Mais je n'aime pas l'utiliser.
 
Mais c'est bien que t'y reviennes car je pose souvent ce genre d'exo à mes élèves. Et voici la solution que je leur propose en final

Code :
  1. ouinon()
  2. {
  3.     while true
  4.     do
  5.         echo -n "$* ?"
  6.         read rep
  7.  
  8.         case $rep in
  9.             [oO] | [oO][uU][iI] )  return 0;;
  10.             [nN] | [nN][oO][nN] )  return 1;;
  11.             *) echo "Mauvaise réponse"
  12.         esac
  13.     done
  14. }
  15.        
  16. if ouinon "Voulez-vous faire ceci"
  17. then
  18.    ... <on le fait>...
  19. else
  20.    ... <on le fait pas>...
  21. fi
  22.  
  23. while ouinon On continue
  24. do
  25.      ...<on continue le traitement>...
  26. done
  27.  
  28. etc...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1783350
spamoi
Posté le 06-09-2008 à 10:49:08  profilanswer
 

Finalement j'ai fait comme ceci:
 

Code :
  1. # initialise la variable, sinon le test fonctionne pas!
  2. if_cups=x
  3. while test $if_cups != o -a $if_cups != n
  4.     do
  5. echo "Exporter la configuration de cups ? o/n"
  6. read if_cups
  7.     done

Message cité 1 fois
Message édité par spamoi le 06-09-2008 à 10:51:01
n°1783353
Sve@r
Posté le 06-09-2008 à 11:09:09  profilanswer
 

spamoi a écrit :

Finalement j'ai fait comme ceci:
 

Code :
  1. # initialise la variable, sinon le test fonctionne pas!
  2. if_cups=x
  3. while test $if_cups != o -a $if_cups != n
  4.     do
  5. echo "Exporter la configuration de cups ? o/n"
  6. read if_cups
  7.     done



 
si t avais bien lu les posts de Matafan et les miens, tu aurais vu que l'initialisation n'est pas utile quand on écrit bien les tests
 

Code :
  1. while test "$if_cups" != "o" -a "$if_cups" != "n"
  2. do
  3.     echo "Exporter la configuration de cups ? o/n"
  4.     read if_cups
  5. done


Message édité par Sve@r le 06-09-2008 à 11:10:12

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 06-09-2008 à 11:09:09  profilanswer
 

n°1783672
spamoi
Posté le 07-09-2008 à 18:13:18  profilanswer
 

Ok merci du conseil ;)

n°1785290
Sve@r
Posté le 10-09-2008 à 22:00:04  profilanswer
 

spamoi a écrit :

Ok merci du conseil ;)


En fait, ce qui aurait été vraiment super, c'est que tu trouves tout seul pourquoi dans ton while test $if_cups != o -a $if_cups != n ça ne mache pas si "if_cups" n'a pas été initialisé (ou bien su tu appuies sur "entrée" sans répondre à la question)
=> dans ce cas là, le shell voit
test != o -a != n
et là, il apprécie pas du tout. Pour lui, la commande "test" avec l'opérateur  "!=" doit avoir 2 opérandes, un situé avant et un après. Et là, il n'y a pas d'opérande avant => test:= unary operator expected => il attend un opérateur s'appliquant sur un seul opérande puisqu'il n'en voit qu'un.
 
Dans cette syntaxe: test "$if_cups" != "o" -a "$if_cups" != "n", si la variable "if_cups" est vide ou n'existe pas, le shell voit
test "" != "o" -a "" != "n" => il y a bien ce qu'il faut en opérandes => sa logique est satisfaite => ça fonctionne


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Script shell et menu

 

Sujets relatifs
Vend un script PHP par Paypal ou Allopass, aidez moi svpAnimation flash qui passe au dessus de mon menu
Script bash - Problème d'espace dans une variable RESOLUà l'aide : mon script ne fonctionne pas sous w2k
Petite question sur script BATMenu UL + compatibilité IE6
intégrer menu déroulant dans tableauScript bash; fork: Ne peut allouer de la mémoire
[php] Compréhension d'un script. 
Plus de sujets relatifs à : Script shell et menu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR