Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 21/05/2013, à 03:48

fnux

[Résolu] Problème bash (ou sh) avec la fonction "read".

Bonjour tout le monde.

J'ai un nouveau problème de compréhension du fonctionnement de bash (ou de sh) avec l'instruction read.

Exemple :

#!/bin/sh
read -p "Does the Prince speak English (Y/n) ? : " ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ]
  then
    echo "Hello PSG World!"
  else
    echo "Yes, the Prince speaks English but he doesn't talk to you!"
fi

Bon, là ça marche.

Mais si j'écris :

#!/bin/sh
QUESTION="Does the Prince speak English (Y/n) ? : "
read -p $QUESTION ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ]
  then
    echo "Hello PSG World!"
  else
    echo "Yes, the Prince speaks English but he doesn't talk to you!"
fi

Alors, le contenu de la question ($QUESTION) posée n'affiche que "Does" et provoque une erreur.

Que dois-je faire pour que le message de la question ($QUESTION) soit affiché en entier car il semble bien que son contenu soit "tronqué" dès le premier espace rencontré dans la chaine de caractères de cette variable ($QUESTION) ?

Ou bien (solution alternative), il y aurait-il une astuce pour remplacer les "espaces" par un caractère "non visible" puisque le code suivant fonctionne :

#!/bin/sh
QUESTION="Does_the_Prince_speak_English_(Y/n)_?_:_"
read -p $QUESTION ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ]
  then
    echo "Hello PSG World!"
  else
    echo "Yes, the Prince speaks English but he doesn't talk to you!"
fi

PS: on peut aussi remplacer "_" par "-" ou par "." mais dans tous les cas, le problème est alors une question de facilité de lecture du contenu de la question posée !

Merci d'avance de toute aide car mon but est de pouvoir écrire un script multi langues du genre :

#!/bin/sh
LANGUAGE=$LANG | cut 1,2
if [ "$LANGUAGE" = "fr" ]
  then
    QUESTION="Il ne parle pas Français Le Prince (O/n) ? : "
    RESPONSE1="Salut le monde du PSG !"
    RESPONSE2="Oui, le Prince parle Francais mais il parle pas a toi !"
  else
    QUESTION="Does the Prince speak English (Y/n) ? : "
    RESPONSE1="Hello PSG World!"
    RESPONSE2="Yes, the Prince speaks English but he doesn't talk to you!"
fi
read -p $QUESTION ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ] || [ "$ANSWER" = "O" ] || [ "$ANSWER" = "o" ]
  then
    echo $RESPONSE1
  else
    echo $RESPONSE2
fi

et ainsi de suite pour d'autres langues.

Voili, voilou tout le problème. wink

Dernière modification par fnux (Le 21/05/2013, à 14:40)


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The French West Palm Beach Linux Association.

Hors ligne

#2 Le 21/05/2013, à 05:52

grim7reaper

Re : [Résolu] Problème bash (ou sh) avec la fonction "read".

Salut,

Comme souvent en Bash, quand il y a des espaces dans une chaîne de caractères, il suffit de la mettre entre double quote.

#!/bin/sh
QUESTION="Does the Prince speak English (Y/n) ? : "
read -p "$QUESTION" ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ]
  then
    echo "Hello PSG World!"
  else
    echo "Yes, the Prince speaks English but he doesn't talk to you!"
fi

Ce code fonctionne smile

Hors ligne

#3 Le 21/05/2013, à 14:39

fnux

Re : [Résolu] Problème bash (ou sh) avec la fonction "read".

Salut grim7reaper,

grim7reaper a écrit :

Salut,

Comme souvent en Bash, quand il y a des espaces dans une chaîne de caractères, il suffit de la mettre entre double quote.

#!/bin/sh
QUESTION="Does the Prince speak English (Y/n) ? : "
read -p "$QUESTION" ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ]
  then
    echo "Hello PSG World!"
  else
    echo "Yes, the Prince speaks English but he doesn't talk to you!"
fi

Ce code fonctionne smile

Effectivement, ça fonctionne et je n'y avais pas pensé.

Merci beaucoup.

Mais il faut bien avouer que ce qui est un peu déroutant est que :

avec : QUESTION="Does the Prince speak English (Y/n) ? : "
echo $QUESTION fonctionne très bien
alors que read -p $QUESTION ne fonctionne pas (il faut read -p "$QUESTION") !

Pourquoi faire simple quand ou peut faire compliqué ? tongue

Dernière modification par fnux (Le 21/05/2013, à 19:36)


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The French West Palm Beach Linux Association.

Hors ligne

Haut de page ↑