Probleme avec un script bash

Résolu
oupsman Messages postés 319 Statut Membre -  
dubcek Messages postés 19021 Statut Contributeur -
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 ;-)
A voir également:

4 réponses

dubcek Messages postés 19021 Statut Contributeur 5 637
 
hello
et comme cela
if [ $VAR1 -lt $VAR2 ]

string1 > string2
True if string1 sorts after string2 lexicographically in the current locale.
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
jipicy Messages postés 41342 Statut Modérateur 4 896 > 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
oupsman Messages postés 319 Statut Membre 10 > jipicy Messages postés 41342 Statut Modérateur
 
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
jipicy Messages postés 41342 Statut Modérateur 4 896 > 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
oupsman Messages postés 319 Statut Membre 10 > jipicy Messages postés 41342 Statut Modérateur
 
ok merci, c'est la première fois que j'entend ce terme "pseudo-commande", je vais m'informer.

encore merci et à + ;-)
-1
dubcek Messages postés 19021 Statut Contributeur 5 637
 
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
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
chuka Messages postés 980 Statut Membre 378
 
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
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