jakol Posté(e) le 25 avril 2009 Partager Posté(e) le 25 avril 2009 <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 More sharing options...
keneda212 Posté(e) le 26 avril 2009 Partager Posté(e) le 26 avril 2009 salut dans ton premier exemple, un seul \ ne suffirai pas (juste devant le ') ? pour resoudre ton pb, met ta phrase entre " " devrait suffire pour prenre en compte la quote ps : les while c'est moche, surtout quand ce que tu veux faire, c'est un for Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 20 mai 2009 Partager Posté(e) le 20 mai 2009 ./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 More sharing options...
BreizFenrir Posté(e) le 25 mai 2009 Partager Posté(e) le 25 mai 2009 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 More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.