while [ $1 != chaine ] ne marche pas sous GNU (mais sous SunOS oui)

while [ $1 != chaine ] ne marche pas sous GNU (mais sous SunOS oui) - Shell/Batch - Programmation

Marsh Posté le 05-11-2003 à 13:52:03    

'ai un bout de code très simple qui marche sous SunOS mais pas sous GNU/* (GNU/Linux)
 
J'ai l'erreur suivante sous Linux:

Code :
  1. != unary operator expected


Pourquoi??
 
Voilà le code:

Code :
  1. #!/bin/sh
  2. while [ $1 != debut ]
  3. do
  4. echo "plop"
  5. shift
  6. done


 
Si qq'un à une idée ce serait cool ;)
 
Merci d'avance  
 
 
DDuK

Reply

Marsh Posté le 05-11-2003 à 13:52:03   

Reply

Marsh Posté le 05-11-2003 à 15:36:54    

alors la, je ne sais vraiment pas, mais peut etre peux tu contourner la difficulté en attendant ?
du style :  
 
 
 
COND=0
 
while [ ${COND} = 0 ]
do
      case $1 in
                  debut) echo "blabla";;
                  *) echo "plop"
                     COND=1 ;;
      esac
done


Message édité par skwee le 05-11-2003 à 15:43:26
Reply

Marsh Posté le 05-11-2003 à 21:10:42    

ca depent du shell non ?

Reply

Marsh Posté le 05-11-2003 à 21:13:01    

c'est pas standard pour sh le "!="
 
si mes souvenirs sont bons, l'op d'inégalité c'est "-ne" ou un truc comme.
 
(read the fucking "man sh" please [:cupra])
 
edit: je me suis planté comme une merde, pardon.
 
apparement le != est correct pour comparer des strings


Message édité par schnapsmann le 05-11-2003 à 21:16:26

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 05-11-2003 à 21:57:03    

Mais debut n'est pas une string non ? Il faudrait plustot ecrire "debut" dans ce cas.

Reply

Marsh Posté le 05-11-2003 à 22:01:57    

Kristoph a écrit :

Mais debut n'est pas une string non ? Il faudrait plustot ecrire "debut" dans ce cas.


 
exact, on dirait que t'as gagné le cocotier  [:calin]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 06-11-2003 à 04:06:09    

Non le problème est ailleurs : si ça ne match jamais (ou si tu oublies de donner un argument) $1 va finir par être vide, et tu as une erreur de syntaxe puisque le shell voit « while [ != "debut"] ». Il faut mettre des « " » autour du $1.
 
Après évidemment il y a un autre problème : le script ne s'arrête plus (avant il s'arretait... Avec l'erreur). Donc tu peux faire un truc du genre :

#!/bin/sh
 
while [ $1 ] && [ "$1" != "debut" ]
do
    echo "plop"
    shift
done


Message édité par matafan le 06-11-2003 à 04:13:41
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed