Forums FUG-FR
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl
Divers et varié >> Programmation >> Message erreur script sh
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl?num=1148622098

Message started by Marck on 26. May 2006 at 07:41

Title: Message erreur script sh
Post by Marck on 26. May 2006 at 07:41
Bonjour


Code (]#!/bin/sh
echo -n "Souhaitez-vous continuer (O/n): "
read ANSWER
if [ $ANSWER = "n" ):

|| [ $ANSWER = "N" ] ; then
     echo NON
     exit
fi
echo OUI


Le script ci-dessus fait bien ce que je souhaite, il ne s'arrête que si l'on répond "n" ou "N"... Son seul petit défaut est que, si (et seulement si) on se contente d'appuyer seulement sur "Enter", il affiche:

[code]pocket marck % ./forum_script
Souhaitez-vous continuer (O/n):
[: =: unexpected operator
[: =: unexpected operatorOUI[/code]

Comment supprimer ces "[: =: unexpected operator" ? J'ai essayé avec une prise en compte des $ANSWER="" mais cela ne semble pas convenir (ou je me suis planté).

Merci, Marck

PS: pour ceux qui suivent un peu le feuilleton "mon PC reboote tout seul" ; depuis que j'ai tout démonté (et remonté sur une structure en Légo pour avoir tout sous la main) il semble très bien fonctionner... Un petit faux contact ? Une poussière mal placée ? Je vais attendre encore quelques heures / jours avant de tout remettre en place (quoique... cela ne manque pas de charme ainsi).

PPS: je poste ma question script dans "Bar" car je ne vois pas vraiment où la poser sinon...

Title: Re: Message erreur script sh
Post by idroxid on 26. May 2006 at 08:59
il faut que tu places ta variable $ANSWER entre guillemets dans le test:
if [ "$ANSWER" = "n" ] || [ $ANSWER = "N" ] ; then

Title: Re: Message erreur script sh
Post by laurent on 26. May 2006 at 09:17
salut, ton mecano plein l'air comme ca y risque pas de chauffer  ;D

pour ton script ca attend au moins un caractere d'ou si tu tape direct entre le renvoi de "l'erreur" je pense

peut etre rajouter un petit truc ou tu teste  si c'est pas n ou N c'est forcement o donc tu force le o quelque soit la touche appuiée differente de n ou N

poser de pareil quetion pour un weekend prolongé  :)

ps: je sais pas ce que tu veut faire mais si on a de gros doigt et qu'on rate n ou N et donc que ca fait oui alors qu'on voulais faire non c'est pas genant?

Title: Re: Message erreur script sh
Post by Marck on 26. May 2006 at 09:41

Quote:
il faut que tu places ta variable $ANSWER entre guillemets dans le test:
if [ "$ANSWER" = "n" ] || [ $ANSWER = "N" ] ; then


Merci Idroxid j'aime les réponses simples et efficaces comme celle-ci. C'est bon.


Quote:
ps: je sais pas ce que tu veut faire mais si on a de gros doigt et qu'on rate n ou N et donc que ca fait oui alors qu'on voulais faire non c'est pas genant?


Là c'est juste une confirmation "au cas où"... en principe c'est "oui" et cela ne porte de toute façon pas à de lourdes conséquences donc effectivement tout sauf "n" ou "N" est considéré comme "oui".

Merci
Marc


Title: Re: Message erreur script sh
Post by laurent on 26. May 2006 at 11:04
a oui c'est vrai en sh faut toujours les " "

bon la que je tiens du monde qui parle de scipt est-ce que quelqu'un aurai un exemple concret pour m'expliquer la diference entre
(j'ai pris ton expresion pour exemple marck tu me fera pas de proces pour plagiat hein  ;D )

[ "$ANSWER" = "n" ] || [ "$ANSWER" = "N" ]

et ca

[ "$ANSWER" = "n"  -o  "$ANSWER" = "N" ]



le premier c'est un operateur du shell entre les 2 commandes et le second  interne a la commande
j'ai du avoir l'explication pour le c il y a fort longtemps mais je me souviens plus (c'est pas beau de viellir les neuronnes fuit top vite)

laurent

Title: Re: Message erreur script sh
Post by francis on 26. May 2006 at 11:37
Dans le second cas, il n'y aura qu'un seul process spawne pour evaluer les expressions, alors que l'autre forme en emploira un ou deux selon que la premiere evaluation retourne vrai ou faux.
C'est tout ce que je voie.

Title: Re: Message erreur script sh
Post by idroxid on 26. May 2006 at 13:19

Marck wrote on 26. May 2006 at 09:41:
j'aime les réponses simples et efficaces comme celle-ci.

Maintenant que j'ai le temps, je peux developper un peu  plus:
Lors du test
i f [ $ANSWER = "n" ] || [ $ANSWER = "N" ] ; then
si l'utilisateur tape Entrée, la variable ANSWER correspond à la chaîne vide, d'où le test:
i f [ = "n" ]  échoue bien sur
Si tu entoures avec des guillemets, le test devient:
i f [ "" = "n" ] le test est valide.


Forums FUG-FR » Powered by YaBB 2.5.2!
YaBB Forum Software © 2000-2025. All Rights Reserved.