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
    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é)
      -1
    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]$    
      ;-))
      -1
    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' ?
      -1
    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]$
      ;-))
      -1
    5. @jipicyok merci, c'est la première fois que j'entend ce terme "pseudo-commande", je vais m'informer.

      encore merci et à + ;-)
      -1
  2. 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
    1
    1. 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
      |/
      0
      1. 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
        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é)
          0