[ Ksh ] Variable contenant des espaces
Icefan
-
Icefan Messages postés 6 Statut Membre -
Icefan Messages postés 6 Statut Membre -
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 ^^'
A voir également:
- [ Ksh ] Variable contenant des espaces
- Espaces insécables - Guide
- Tapez cette phrase, en respectant bien les espaces et la ponctuation. - Guide
- Variable d'environnement temp - Forum Word
- Faut il mettre les espaces pour la clé wifi ✓ - Forum Samsung
- Comment ecrire la clé de sécurité ? - Forum Réseau
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 :
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
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 :
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
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" :
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.