Probleme avec un script bash

Résolu
oupsman Messages postés 319 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    et comme cela
    if [ $VAR1 -lt $VAR2 ]

    string1 > string2
    True if string1 sorts after string2 lexicographically in the current locale.
    1
    1. oupsman Messages postés 319 Statut Membre 10
       
      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
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > oupsman Messages postés 319 Statut Membre
         
        Salut,

        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
      2. oupsman Messages postés 319 Statut Membre 10 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        salut, 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
      3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > oupsman Messages postés 319 Statut Membre
         
        Mais 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
      4. oupsman Messages postés 319 Statut Membre 10 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        ok merci, c'est la première fois que j'entend ce terme "pseudo-commande", je vais m'informer.

        encore merci et à + ;-)
        -1
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
  3. jean3w
     
    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
  4. chuka Messages postés 980 Statut Membre 379
     
    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. oupsman Messages postés 319 Statut Membre 10
       
      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