Comparaison avec Expression régulière en CSH
Bonjour,
Je me retrouve confronté à un problème dans un script en csh.
Je saisis donc un paramètre ( qui sera réutilisé dans le script par le $1) lorsque je lance le script.
Mon problème se situe au niveau de la comparaison du paramètre (chaîne de caractères) avec le 'pattern' (expression régulière):
- Si je rentre le paramètre "texte", le script m'affiche "A lire", ça c'est normal.
-Si je rentre un paramètre qui ne correspond pas au pattern, le script m'affiche EGALEMENT "A lire" à la place de "Lu".
Il y a donc j'imagine une erreur dans l'expression régulière ou la syntaxe du if, mais après avoir testé longtemps, je n'ai toujours pas de résultat correct.
Auriez-vous des pistes?
Merci bien!
Je me retrouve confronté à un problème dans un script en csh.
#!/bin/csh if ( $1 !~ "^texte.*" ) then echo Lu else echo A lire endif
Je saisis donc un paramètre ( qui sera réutilisé dans le script par le $1) lorsque je lance le script.
Mon problème se situe au niveau de la comparaison du paramètre (chaîne de caractères) avec le 'pattern' (expression régulière):
- Si je rentre le paramètre "texte", le script m'affiche "A lire", ça c'est normal.
-Si je rentre un paramètre qui ne correspond pas au pattern, le script m'affiche EGALEMENT "A lire" à la place de "Lu".
Il y a donc j'imagine une erreur dans l'expression régulière ou la syntaxe du if, mais après avoir testé longtemps, je n'ai toujours pas de résultat correct.
Auriez-vous des pistes?
Merci bien!
A voir également:
- Comparaison avec Expression régulière en CSH
- Comparaison million milliard - Accueil - Technologies
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Logiciel comparaison photo gratuit - Télécharger - Photo & Graphisme
- Avoir du ping expression ✓ - Forum jeux en ligne
1 réponse
Je ne fais pas de csh mais tu es sûr de la syntaxe de ton "if ... then ... endif" ? En shell standard c'est plutôt :
De plus pour ce programme, csh ne me parraît pas nécessaire, un simple "grep -q" doit suffire. C'est un peu dommage quand on sait que csh n'est pas installé en général alors qu'ici n'importe quelle shell (sh, qui souvent pointe sur dash ou bash) suffit amplement.
Exemple :
L'option -q va permettre de voir si le motif est trouvé (code d'exécution 0) ou non (code d'exécution 1) et rentrer en conséquence dans le if ou non. L'opérateur $(...) permet d'évaluer le résultat d'une commande (ici echo $1 | grep -q "^texte\.") et d'injecter le résultat dans le test.
Enfin, ton expression régulière est incorrecte car "." ne désigne pas le caractère . (ça, c'est le symbole \. ou [.]), mais n'importe quel caractère excepté \0, \n et \r. De même le caractère * ne désigne pas n'importe quelle suite de caractère (wildcard) mais une répétition entre 0 et l'infini. Je t'invite à prendre quelques minutes pour lire la sytnaxe des expressions régulières, par exemple dans :
Bonne chance
if [ condition ] ; then ... else ... fi
De plus pour ce programme, csh ne me parraît pas nécessaire, un simple "grep -q" doit suffire. C'est un peu dommage quand on sait que csh n'est pas installé en général alors qu'ici n'importe quelle shell (sh, qui souvent pointe sur dash ou bash) suffit amplement.
(mando@aldur) (~) $ echo "texte.truc" | grep -q "^texte\." (mando@aldur) (~) $ echo $? 0 (mando@aldur) (~) $ echo "toxte.truc" | grep -q "^texte\." (mando@aldur) (~) $ echo $? 1
Exemple :
if [ $(echo $1 | grep -q "^texte\.") ] ; then ... else ... fi
L'option -q va permettre de voir si le motif est trouvé (code d'exécution 0) ou non (code d'exécution 1) et rentrer en conséquence dans le if ou non. L'opérateur $(...) permet d'évaluer le résultat d'une commande (ici echo $1 | grep -q "^texte\.") et d'injecter le résultat dans le test.
Enfin, ton expression régulière est incorrecte car "." ne désigne pas le caractère . (ça, c'est le symbole \. ou [.]), mais n'importe quel caractère excepté \0, \n et \r. De même le caractère * ne désigne pas n'importe quelle suite de caractère (wildcard) mais une répétition entre 0 et l'infini. Je t'invite à prendre quelques minutes pour lire la sytnaxe des expressions régulières, par exemple dans :
man grep
Bonne chance
Je ne fais pas de csh mais tu es sûr de la syntaxe de ton "if ... then ... endif" ? En shell standard c'est plutôt : ...
Oui, oui, c'est bien la bonne, en csh elle est totalement différente des shells conventionnels ;-(