Probleme avec un script bash

Résolu
Bonjour, voici mon petit programme très simple

#!/bin/bash
VAR1=3
VAR2=7
if [ "$VAR1" > "$VAR2" ]
then
echo Je suis dans la condition vraie
echo "$VAR1 > $VAR2"
else
echo Je suis dans la condition fausse
echo "$VAR1 < $VAR2"
fi


Il m'affiche :

Je suis dans la condition vraie
3 > 7


Alors que 3 est strictement plus petit que 7 donc il doit m'afficher :
Je suis dans la condition fausse
3 < 7

MErci de votre aide ;-)
Configuration: Linux
Firefox 2.0.0.17

4 réponses

  1. Contributeur
    hello
    et comme cela
    if [ $VAR1 -lt $VAR2 ]

    string1 > string2
    True if string1 sorts after string2 lexicographically in the current locale.
    1. salut,

      j'ai fais comme tu dis :

      #!/bin/bash
      VAR1=3
      VAR2=7
      if [ $VAR1 -lt $VAR2 ]
      then
      echo "$VAR1 > $VAR2"
      else
      echo "$VAR1 < $VAR2"
      fi

      Résultat : 3 > 7 (toujours pareil, rien n'a changé)
    2. Modérateur
      @oupsmanSalut,

      Normal, t'as inversé les "< > " ;-))

      -lt veut dire inférieur à ...
      [tmpfs]$ cat oupsman
      #!/bin/bash
      
      if [ $1 -lt $2 ]
      then
      echo "$1 < $2"
      else
      echo "$1 > $2"
      fi
      
      [tmpfs]$ ./oupsman 2 5
      2 < 5
      
      [tmpfs]$ ./oupsman 8 4
      8 > 4
      
      [tmpfs]$    
      ;-))
    3. @jipicysalut, c'est vrai, j'ai inversé lol, je suis bête, merci.

      Mais ce que je ne comprend pas, donc les signes '>' ou '<' n'est pas reconnu dans un test de condition dans if ?

      pourtant '=' n'a pas besoin d'être écrit par autre chose ....
      donc je ne comprend pas pourquoi on ne peut pas écrire '<' à la place de '-lt' ?
    4. Modérateur
      @oupsmanMais ce que je ne comprend pas, donc les signes '>' ou '<' n'est pas reconnu dans un test de condition dans if ?
      Si, enfin sans la peudo-commande "test" ou "[...]" :
      #!/bin/bash
      
      if  (($1 < $2))
      then
      echo "$1 < $2"
      else
      echo "$1 > $2"
      fi
      [tmpfs]$
      ;-))
    5. @jipicyok merci, c'est la première fois que j'entend ce terme "pseudo-commande", je vais m'informer.

      encore merci et à + ;-)
  2. Salut,
    As-tu essayé d'enlever les "" dans le if if[$var3>$var1]
    Je pense qu'en fait avec les "" il compare le caractère 3 et le caractère 7 au lieu de la valeur....
    1. salut, j'ai essayé comme tu dis :

      #!/bin/bash
      VAR1=3
      VAR2=7
      if [ $VAR1 > $VAR2 ]
      then
      echo "$VAR1 > $VAR2"
      else
      echo "$VAR1 < $VAR2"
      fi

      Résultat : 3 > 7, (donc ça n'a rien changé)
  3. Salut,
    je penses pas qu'on puisses utiliser ">" et "<" en bash.
    Ceci dit je peut me tromper j'ai que trois jours de bash derriére moi mais:
    Remplaces les chevrons par -lt (lower to) et -gt (greater to), c'est ce que j'ai utilisé dans mon 1er script:

    #! /bin/bash
    # deviner un nombre pseudo-aleatoire(1-100)
    
    Nb1=`date | cut -d" " -f5 | cut -d":" -f2`
    Nb2=`date | cut -d" " -f5 | cut -d":" -f3`
    Score=0
    Nombre=$((Nb1+2*Nb2))
    if [ $Nombre -gt 100 ]
    then
    	Nombre=$((Nombre-100))
    fi
    
    
    echo "\$Nb1= $Nb1 \$Nb2= $Nb2 Nombre = $Nombre"
    NbCoup=10
    clear
    echo -n "Entrez votre nom: "
    read joueur
    clear
    echo "*************************************"
    echo "**                                 **"
    echo "**     GUESS NUMBER (1-100)        **"
    echo "*************************************"
    
    while [ $NbCoup -gt 0 ]
    do
    echo "Coups restant $NbCoup"
    echo -n "Entrez un nombre"
    read devine
    	if [ $devine -eq $Nombre ]
    	then
    		echo "BraVo Vous avez trouvé en $((11-NbCoup)) coup(s)"
    		Score=$((NbCoup*Score))
    		echo "$joueur :.:" `date` ":.:" $Score >>highscore
    		cat highscore	
    		exit $NbCoup
    	fi
    	if [ $devine -lt $Nombre ]
    	then
    		echo "Trop Petit"
    		NbCoup=$((NbCoup-1))
    			diff=$((devine-Nombre))
    			if [ $diff -lt 0 ]
    			then
    				diff=$((-diff))
    			fi
    		Score=$((Score+diff))
    	fi
    	if [ $devine -gt $Nombre ]
    	then
    		echo "Trop Grand"
    		NbCoup=$((NbCoup-1))
    			diff=$((devine-Nombre))
    			if [ $diff -lt 0 ]
    			then
    				diff=$((diff*-1))
    			fi
    		Score=$((Score+diff))
    	fi
    
    done
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "XX          Game Over $Nombre             XX"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    
    exit 1


    A propos si qqun a un meilleur algo pour les nombres aléatoires je suit preneur ;)

    |\_
    (:> _)X
    |/
    1. Contributeur
      hello

      string1 == string2
      True if the strings are equal. ‘=’ may be used in place of ‘==’ for strict posix compliance.
      string1 != string2
      True if the strings are not equal.
      string1 < string2
      True if string1 sorts before string2 lexicographically in the current locale.
      string1 > string2
      True if string1 sorts after string2 lexicographically in the current locale.
      arg1 OP arg2
      OP is one of ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, or ‘-ge’. These arithmetic binary operators