Pages : 1
#1 Le 11/04/2007, à 05:37
- Cyberfreak
[resolu]Bash me fait des miseres..
Bonjour.
Je cherche a ecrire un bash qui teste 2 valeurs
voici mon script :
#!/bin/bash
if (( $1 > $2 ))
then
echo trop gros
else
echo ok
fi
Et voici ce qu'il me fait :
sh test.sh 34 54
test.sh: 7: 34: not found
ok
sh test.sh 54 34
test.sh: 7: 54: not found
ok
J'ajoute qu'il me cree un fichier vide qui s'appelle comme le second parametre (soit 54 et 34)
J'ai une erreur de syntaxe quelque part?
Dernière modification par Cyberfreak (Le 11/04/2007, à 12:55)
Si ca marche comme ca, ne changez rien.
Hors ligne
#2 Le 11/04/2007, à 07:30
- woodstock
Re : [resolu]Bash me fait des miseres..
ben... j'ai recopié ton script tel que ci-dessus et il fonctionne parfaitement chez moi... (bash 2.05b sous sarge)
Hors ligne
#3 Le 11/04/2007, à 08:35
- francois-web
Re : [resolu]Bash me fait des miseres..
J'ajoute qu'il me cree un fichier vide qui s'appelle comme le second parametre (soit 54 et 34)
Est-ce qu'il se comporte pareil si au lieu de le lancer en faisant sh test.sh, tu le lances en faisant ./test.sh ?
Chez moi ça fonctionne aussi correctement
Ca veut dire que ton script est excellent
22.04 // Gnome-Shell
Hors ligne
#4 Le 11/04/2007, à 10:37
- Cyberfreak
Re : [resolu]Bash me fait des miseres..
Bon...
J'ai essaye sur un autre pc, ca marche aussi nikel.
C'est donc le bash d'ubuntu qui est bugge?
Que faire?
si je fais apt-get remove bash, est-ce que je pourrai encore faire apt-get install bash ensuite?
Si ca marche comme ca, ne changez rien.
Hors ligne
#5 Le 11/04/2007, à 12:43
- kaworu
Re : [resolu]Bash me fait des miseres..
Salut !
Si je me trompe pas, le /bin/sh d'ubuntu pointe vers /bin/dash qui n'est pas /bin/bash.
En effet il te crée un fichier comme le nom du second paramètre, car dash ne vas pas interpréter (( ... )) comme tu le voudrait (expansion arithmétique) et comme bash le ferai. Donc le signe > devient non pas un opérateur de comparaison mais une redirection de flux ! (comme si tu fais "echo "foo" > bar).
Pour exécuter ton programme tu devrais plutôt faire soit :
# il faut que test.sh soit exécutable ;)
./test.sh
soit
bash test.sh
Autrement pour le test, je te conseil de privilégier le [ POSIX (donc plus portable) que l'expansion arithmétique (( ... )).
ton script donnerai :
#!/bin/bash
if [ $1 -gt $2 ]
then
echo trop gros
else
echo ok
fi
(ce script par exemple, doit marcher avec dash).
Dernière modification par kaworu (Le 11/04/2007, à 12:47)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#6 Le 11/04/2007, à 12:55
- Cyberfreak
Re : [resolu]Bash me fait des miseres..
Oui, mais non, car c'est pour tester des nombres d'octets, et il me dit que ca depasse les valeurs autorisees par test.
Bon, ceci dit, c'etait en effet un probleme de fichier executable... c bizarre, d'habitude ca marche comme ca.
Si ca marche comme ca, ne changez rien.
Hors ligne