Test d'égalité [Korn Shell] - Shell/Batch - Programmation
Marsh Posté le 18-05-2005 à 10:20:21
if [ -eq ${CHX} "2" ]
non ?
Marsh Posté le 18-05-2005 à 10:24:51
J'avais déjà testé et je viens de nouveau de tester ... pareil
Alors maintenant je me demande si cela ne vient pas d'une bizarrerie du shell sous lequel je travaille.
Marsh Posté le 18-05-2005 à 11:03:23
C'est pas ksh, c'est test qu'il faut voir.
La syntaxe [ ] est un raccourci en ksh pour accéder à ce binaire.
Donc l'idéal est de faire "man test" pour avoir les informations nécessaires.
Mais pour t'aider, sache que les opérateurs -eq, -ne, -lt etc. sont réservés aux tests numériques.
Pour les chaînes, c'est =, !=, < etc.
Donc le mieux est d'écrire :
Code :
|
Normalement, ça fonctionne.
Marsh Posté le 18-05-2005 à 17:31:11
Azariel a écrit : Marche pas non plus ... |
Pas normal.
Testé des tas de fois, ça fonctionne.
Ca vient pas du test alors, ça doit provenir de $CHX qui contient j'sais pas quoi.
Fait un "echo $CHX" avant le if, pour voir ce que ça donne.
Citation : [ $CHX -eq 2 ] |
Surtout pas, sauf si tu testes avant que $CHX n'est pas une chaîne vide, ou que tu es absolument, complètement, 100% sûr que $CHX ne sera jamais vide.
Sinon le shell va interpréter ça comme [ -eq 2 ] et il va hurler.
Eventuellement, tu peux écrire, pour éviter toute erreur :
if [ "$CHX" -eq 2 ] |
Mais personnellement je n'aime pas le mélange des genres. Ceci dit comme en shell ça n'a pas d'importance, c'est une possibilité.
Marsh Posté le 19-05-2005 à 09:22:35
Bon, merci à vous !
Je vais me résoudre à aller déranger l'ingenieur système ... quitte à ce qu'il rale ... mais lui au moins doit connaitre les subtilités de son shell.
Encore merci
Marsh Posté le 19-05-2005 à 09:27:28
Citation : mais lui au moins doit connaitre les subtilités de son shell. |
Y a pas 36 façons de faire un test. S'il se déroule pas correctement, c'est que le problème est ailleurs.
Marsh Posté le 19-05-2005 à 13:53:28
Ouais. Et en fait je pense que je connais aussi bien ksh que ton ingé système.
Marsh Posté le 11-06-2005 à 23:33:06
1.- Commence par ajouter un "set -x" au début de ton script pour avoir l'output des settings de variables et les valeurs des tests effectués.
2.- Utilise un nom différent entre la variable a set et celle utilisée en input du sed
CHX2=`echo $CHX | sed ...`
3.- Utilise case/esac pour ce genre de tests:
CHX2= ... |
Marsh Posté le 19-06-2005 à 01:59:58
les tests d'égalité en shell ne doivent pas contenir d'espace
Code :
|
est faux
par contre
Code :
|
c'est OK
Marsh Posté le 19-06-2005 à 03:01:27
couak a écrit : les tests d'égalité en shell ne doivent pas contenir d'espace |
C'est totalement faux. Tu dois confondre avec le "=" d'affectation (var=value).
Marsh Posté le 19-06-2005 à 09:27:01
ReplyMarsh Posté le 10-07-2005 à 00:37:53
Elmoricq a écrit : Pas normal.
|
Exact. et pour éviter le test de nullité :
if [ "x${CHX}" -eq "x2" ]
Marsh Posté le 18-05-2005 à 10:18:42
Bonjour,
Je ne suis pas spécialiste du shell, mais en général je me débrouille.
Malheureusement depuis vendredi, je sèche sur un script et malgrès toutes mes recherches sur le net ou mes lectures, je ne trouve pas pourquoi mon script ne fonctionne pas. Je fais donc appel à vos lumières.
Je commence par récupérer un valeur dans une table d'une base de données puis, suivant la valeur que j'obtiens, j'affecte à une autre variable une valeur prédéfinie (qui sera en fait le nom du script sql à lancer).
Voici la partie de mon script qui ne fonctionne pas (en fait le test) :
#recuperation du choix de traitement
select 'CHX=', par01_1 from req where numero = ${PND_TRAIT};
EOF`
CHX=`echo $CHX| sed 's/.*CHX=//'`
if ${CHX} = "1"
then
PROG=accord
else
if "${CHX}" = "2"
then
PROG=heure
else
PROG=heure2
fi
fi
echo ${PROG}
La requête dans la base ramène ce qu'il faut (à savoir une chaine de caractère qui vaut "1", "2" ou "3". Mais quelque que soit la valeur contenue dans $CHX, $PROG contient toujours heure2.
Si vous voyez la faille de mon script, vous seriez plus que gentil de me mettre le nez dessus.
Merci