[ Ksh ] Variable contenant des espaces
Icefan
-
Icefan -
Icefan -
Bonjour à tous et à toutes.
Je suis actuellement en train de programmer en Ksh un menu de choix pour un client.
Je variabilise les différents choix dans des variables que j'utilise ensuite dans un case mais j'ai un problème.
Mes choix se forment ainsi : chx1="Texte_du_premier_choix"
Pourquoi des underscores ? Car si je mets des simples espaces, la variable $chx1 n'est pas interprétée dans le case ce qui fausse tout mon menu, j'ai donc ajouté ces underscores et cela marche mais cela affiche la variable telle quelle donc avec les underscores et le client ne veut pas ça.
Je cherche donc une solution pour afficher dans le case ma variable avec des espaces.
Je vous donne un bout de code de mon menu pour être plus explicite.
D'abord je déclare mes variables qui vont être utilisées dans le case afin de simplifier la modification de celles-ci en cas de changement d'avis. Ensuite j'ouvre un menu et j'appelle mes variables. Le menu fonctionne très bien si les variables chx* contiennet des "_" à la place des " " ce qui est vite très moche.
Pouvez-vous m'aider ?
Merci d'avance
Icefan
Désolé pour les ligness imbriquées et les paragraphes collés, j'ai du mal a éditer ^^'
Je suis actuellement en train de programmer en Ksh un menu de choix pour un client.
Je variabilise les différents choix dans des variables que j'utilise ensuite dans un case mais j'ai un problème.
Mes choix se forment ainsi : chx1="Texte_du_premier_choix"
Pourquoi des underscores ? Car si je mets des simples espaces, la variable $chx1 n'est pas interprétée dans le case ce qui fausse tout mon menu, j'ai donc ajouté ces underscores et cela marche mais cela affiche la variable telle quelle donc avec les underscores et le client ne veut pas ça.
Je cherche donc une solution pour afficher dans le case ma variable avec des espaces.
Je vous donne un bout de code de mon menu pour être plus explicite.
#!/bin/ksh
chx1="Texte_du_choix1"
chx2="Texte_du_choix2"
chx3="Texte_du_choix3"
chx4="Texte_du_choix4"
chx5="Texte_du_choix5"
chx6="Quitter"
PS3="Veuillez entrer votre choix :"
select choixaction in "$chx1" "$chx2" "$chx3" "$chx4" "$chx5" "$chx6"
do
case $choixaction in
#Selection du choix 1
$chx1)
instructions
break
;;
#Selection du choix 2
$chx2)
instructions
break
;;
#Selection du choix 3
$chx3)
instructions
break
;;
#Selection du choix 4
$chx4)
instructions
break
;;
#Selection du choix 5
$chx5)
instructions
break
;;
#Selection du choix 6
$chx6)
#Arret du programme
echo "\nVous avez quitte le programme\n"
exit
;;
#Controle d erreurs
*) echo "\nChoix inexistant. Veuillez recommencer\n"
;;
esac
done
D'abord je déclare mes variables qui vont être utilisées dans le case afin de simplifier la modification de celles-ci en cas de changement d'avis. Ensuite j'ouvre un menu et j'appelle mes variables. Le menu fonctionne très bien si les variables chx* contiennet des "_" à la place des " " ce qui est vite très moche.
Pouvez-vous m'aider ?
Merci d'avance
Icefan
Désolé pour les ligness imbriquées et les paragraphes collés, j'ai du mal a éditer ^^'
2 réponses
-
Salut,
Chez moi avec un /bin/ksh93 les variables avec des blancs passent très bien ;-\
Sinon, tu peux essayer avec l'expansion des paramètres. En gras les modifs. J'ai testé et ça marche aussi :
#!/bin/ksh93 chx1="Texte_du_choix1" chx2="Texte du choix2" chx3="Texte du choix3" chx4="Texte du choix4" chx5="Texte du choix5" chx6="Quitter" PS3="Veuillez entrer votre choix :" select choixaction in "${chx1//_/ }" "$chx2" "$chx3" "$chx4" "$chx5" "$chx6" do case $choixaction in #Selection du choix 1 ${chx1//_/ }) echo $chx1 break ;; #Selection du choix 2 $chx2) echo $chx2 break ;; #Selection du choix 3 $chx3) echo $chx3 break ;; #Selection du choix 4 $chx4) echo $chx4 break ;; #Selection du choix 5 $chx5) echo $chx5 break ;; #Selection du choix 6 $chx6) #Arret du programme echo "\nVous avez quitte le programme\n" exit ;; #Controle d erreurs *) echo "\nChoix inexistant. Veuillez recommencer\n" ;; esac done -
Salut =)
Merci pour ta réponse.
Je me suis empressé de tester tout ça et malheureusement rien ne va :'(
Si j'ajoute 93 au #!/bin/ksh93, il me dit :
interpreter "/bin/ksh93" not found
file link ressolves to "/usr/bin/ksh93"
sh: vues2.sh (nom de mon script): not found
En gros, il ne trouve pas ksh93 et du coup ne trouve pas mon script. J'ai regardé dans l'arboressence via des ".." et il n y a pas de ksh93 dans /usr/bin, il y a bien ksh mais pas 93 :S
Ensuite avec ${chx1//_/ }, il ne m'affiche plus mon menu et me met :
"${chx1//_/ }": bad substitution
Je ne comprend pas pourquoi, ça va faire 2 semaines que j'essaye de régler ce problème d'affichage avec espaces et chaque réponse que l'on me donne me semble bonne mais ne fonctionne pas avec moi :( ça me prend la tête !
Je suis peut-être aussi un boulet qui ne fais pas bien les choses ^^
Éclairer moi s'il vous plait =)
Icefan-
Si j'ai précisé ksh93 c'était juste pour clarifier en fonction de ma distribution (Mandriva).
Sur quel système es-tu ?
Est-ce que ksh est obligatoire ?
Que te renvoie les commandes suivantes dans un shell ksh chez toi :$ ksh --version version sh (AT&T Research) 93t 2008-06-24 $ chx1="Texte_du_choix1" $ echo $chx1 Texte_du_choix1 $ echo ${chx1//_/ } Texte du choix1 $ echo "${chx1//_/ }" Texte du choix1 $ -
Ah d'accord.
Je suis sur Windaube mais j'ai une console Unix via Putty.
Oui.
ksh --version : rien, à moins que je me sois trompé dans la syntaxe ou dans l'endroit de le tapper.
chx1="Texte_du_choix1"
echo $chx1 : Texte_du_choix1
echo ${chx1//_/ } : ${chx1//_/ }: bad substitution
echo "${chx1//_/ }": "${chx1//_/ }": bad substitution -
-
-
Ok ;-\
Donc je disais que chez moi, avec le texte des variables avec les espaces le menu était bien affiché. Par contre chez toi ce n'est pas le cas ?
Essaie de remettre des blancs dans tes variables et de mettre des guillemets autour de tes variables dans le "case" :
chx1="Texte du choix1" chx2="Texte du choix2" ... ... case $choixaction in #Selection du choix 1 "$chx1") instructions break ;; #Selection du choix 2 "$chx2") instructions break ;; etc.
-