Script shell et menu - Shell/Batch - Programmation
Marsh Posté le 01-09-2008 à 16:51:22
Quel shell ?
- Dos avec .bat ? et si oui, quelle version ?
- Vbscript ?
- Unix sh ? ksh ? csh ? bash ?
- Autre ?
Marsh Posté le 01-09-2008 à 16:53:54
Arf, autant pour moi, j'avais tellement la tête dans mon shell
Alors c'est pour un shell en bash.
Merci
Marsh Posté le 01-09-2008 à 21:55:13
Par exemple :
#!/bin/sh |
Marsh Posté le 01-09-2008 à 22:46:45
matafan a écrit : Par exemple :
|
Merci bien matafan !!! il me manquais la syntaxe qui imbrique le deuxième contrôle...
Marsh Posté le 05-09-2008 à 19:51:26
matafan a écrit : Par exemple :
|
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"
Marsh Posté le 05-09-2008 à 22:00:28
"[[ 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).
Marsh Posté le 06-09-2008 à 08:24:47
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 :
|
Marsh Posté le 06-09-2008 à 10:49:08
Finalement j'ai fait comme ceci:
Code :
|
Marsh Posté le 06-09-2008 à 11:09:09
spamoi a écrit : Finalement j'ai fait comme ceci:
|
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 :
|
Marsh Posté le 10-09-2008 à 22:00:04
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
Marsh Posté le 01-09-2008 à 16:17:45
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
Merci pour votre aide !