Bonjour,
je manipule des chaines de caractères - de la forme
"APPEND nom" ou "01 ELEMENT" - en les découpant suivant le résultat de test. Mais j'ai un problème sur les tests. En effet le shell étant non-typés il y a quelques surprises avec les chaines.
[code]
chaine=`expr substr "${ligne}" 1 6`
if [ "$chainelu" = "APPEND" ]
[/code]
donc chaine contient APPEND ou 01 ELE mais le test ne fait rien!!
Soit que c'est toujours vrai suivant l'ajout de "" ("`expr substr "${ligne}" 1 6`") soit il plante - erreur de syntaxe- du fait à priori qu'il considère que la chaine "01 ELE" c'est 01 puis ELE...
J'avais le m^mee problème avec ligne mais cela c'est réglé avec des guillemets sauf que la j'ai essayé les guillements, quote, backquote. mais rien ne fonctionne.
Que puis je faire ?
J'ai pensé faire chaine=`expr substr "${ligne}" 1 2` ainsi le test s'effecturait sur AP mais cela ne me plait pas et je trouve cela du bricolage(je pense qu'on peut faire mieux!!) sans aucune garantie pour la suite de ne pas avoir (AP ELEMENT par exemple).
J'ai aussi voulu passé par un case mais la il ne fait rien du tout ce n'est jamais égale!!
[code]
case "$chaine" in
"APPEND")
echo "---------append--------------" ;;
"END")
echo "-------------END--------------"
*) echo "lignes"
esac
[/code]
Merci pour toutes suggestions ou remarque sur les chaines de caractères en shell(J'ai charché des infos sur le net mais tous ce ressemble et n'apportent pas d''exemple concluant).
C
# faute de frappe ?
Posté par Jean Bréfort (site web personnel) . Évalué à 1.
Chez moi le code suivant fonctionne (sous bash) :
#!/bin/sh
read ligne
chaine=`expr substr "${ligne}" 1 6`
case "$chaine" in
"APPEND")
echo "---------append--------------" ;;
"01 ELE")
echo "---------01 ele--------------" ;;
"END")
echo "-------------end--------------" ;;
*)
echo "$ligne";;
esac
[^] # Re: faute de frappe ?
Posté par canardpc . Évalué à 1.
En fait j'ai commencé par le case mais comme il ne fonctionnait pas j'ai tenté le if... C'est la même chose en théorie mais bon ?!
En tout cas chez moi cela ne marche pas. Il ne passe jamais dans les cas particuliers seulement dans le cas général,
ou suivant - où je mets des guillemets - que dans le cas APPEND ET END et m'indiquant une erreur pour pour les cas ou ligne contient 01 ele...
# As tu essayer les tableaux ?
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 1.
ex:
while read ligne; do
# converti en tableau une chaine séparé par des espaces;
ligne=($ligne)
# test si la 1ere chaine vaut APPEND
# ps: le x est la pour le cas ou la variable ne contient
# pas de données.
if [ x${TOTO[0]} = "xAPPEND" ]; then
...
else
...
fi
done
[^] # Re: As tu essayer les tableaux ?
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 1.
dans l'exemple précédent il faut bien sûr remplacer
${TOTO[0]} par ${ligne[0]}
[^] # Re: As tu essayer les tableaux ?
Posté par canardpc . Évalué à 1.
Je me demande que fait il des espaces ,enfin je verrais ?
Merci pour ces réponses.
[^] # Re: As tu essayer les tableaux ?
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 1.
de colonne.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.