Aller au contenu

shell-script reconnaissance de '


jakol

Messages recommandés

<ital>shell-script reconnaissance de '</ital>

Bonjour,

j'ai fait le shell script suivant:

#!/bin/sh

i=$1

shift

while [ $i -ne 0 ]

do

echo $* >toto

i=$[$i-1]

done

exit

lorsque je lance le programmeen mettant des arguments

$ ./repeat 2 je m\'\appelle jakol # j'ai mis deux \ entre la '

je m'appelle jakol

je m'appelle jakol

c'est bon

mais quand je lance:

./repeat 2 je m'appelle jakol # ' n'est reconnu comme faisant parti des caractères

>

Y aurait-il un moyen dans le script de le faire reconnaitre comme un élément de la phrase ?

merci d'avance pour vos réponses

:o)

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...
./repeat 2 je m'appelle jakol # ' n'est reconnu comme faisant parti des caractères

>

ça, c'est parce que tu ouvre une simple quote, la referme, en ouvre une autre, et ne ferme pas.

le '>' est là pour te permettre de terminer ta commande

$ ./repeat 2 je m\'\appelle jakol # j'ai mis deux \ entre la '

je m'appelle jakol

je m'appelle jakol

inutile de rajouter un second backslash après l'élément que tu veux inhiber

juste un modification (et tu t'en souviendra pour les prochaines)

une incrémentation (enfin, pour le coup, une décrémentation):

i=`expr $i - 1`

(sinon, le shell te répond "[: $[2-1]: bad number" (enfin, je ne doute pas que la syntaxe puisse passer sur certains shells))

et pour info, à part cette modification, ton script fonctionne

h2g2:/usr/local/user# cat test.sh

#!/bin/sh

i=$1

shift

while [ $i -ne 0 ]

do

echo $*

i=`expr $i - 1`

done

h2g2:/usr/local/user# sh test.sh 2 toto \'titi #comment

toto 'titi

toto 'titi

h2g2:/usr/local/user#

Lien vers le commentaire
Partager sur d’autres sites

J'imagine jakol que ton script vise surtout à te faire maitriser la façon dont les paramètres sont utilisés dans un script. Sinon il aurait été plus simple de mettre ta phrase entre double quotes.

Exemples :

$ ./app val1 val2 val3		  # 3 paramètres : val1, val2 et val3
$ ./app "val1 val2" val3		# 2 paramètres : val1 val2 (avec l'espace) et val3
$ ./app val1 'val2 val3'		# 2 paramètres : val1 et val2 val3
$ ./app 'val1"val2' "val3'val4" # 2 paramètres : val1"val2 (avec la double quote) et val3'val4 (avec la simple quote)

À noter qu'entre double quotes, les caractères spéciaux sont évalués (variables, antislash...). Mais pas entre simple quotes!

$ ./app "val1\" val2 " # Fonctionne, le paramètre est val1" val2
$ ./app 'val1\' val2 ' # Ne fonctionne pas, trois paramètres étant détectés : val1\, val2 et un paramètre incomplet

La gestion des espaces et des caractères spéciaux est à mon sens un des trucs les plus chiants, sinon le plus chiant, quand on veut écrire des scripts Bash qui marchent dans toutes les situations ou presque.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...