Pages : 1
#1 Le 28/01/2008, à 22:22
- ydethe
[Résolu] Comparaison dans bash
Bonjour
Ca fait 2 jours que je cherche comment comparer 2 chaà®nes de caractère dans un script bash:
Imaginons que j'ai:
a="2"
b="2"
if [["$a" = "$b"]]
then
echo "Ca marche enfin!!"
fi
Il me retourne
[[2 : not found
comme si il prenais "2" pour une commande
Quelle est la bonne syntaxe?
Merci d'avance
Dernière modification par ydethe (Le 29/01/2008, à 10:46)
Hors ligne
#2 Le 28/01/2008, à 22:32
- gilbert
Re : [Résolu] Comparaison dans bash
en POSIX :
a="2"
b="2"
if [ "${a}" = "${b}" ]; then
echo "Ca marche enfin!!"
fi
en non POSIX
a="2"
b="2"
if [ "${a}" == "${b}" ]; then
echo "Ca marche enfin!!"
fi
Dernière modification par gilbert (Le 28/01/2008, à 22:33)
Simplement moi-même..
Hors ligne
#3 Le 28/01/2008, à 22:34
- ydethe
Re : [Résolu] Comparaison dans bash
Merci
Hors ligne
#4 Le 28/01/2008, à 23:45
- Link31
Re : [Résolu] Comparaison dans bash
Il me retourne
[[2 : not found
comme si il prenais "2" pour une commande
Quelle est la bonne syntaxe?
[[ étant un programme, il prend des arguments. Il faut donc écrire [[ "$a" = "$b" ]] (avec un espace entre chaque partie de la commande), o๠[[ est la commande et "$a" = "$b" ]] sont les arguments.
Hors ligne
#5 Le 29/01/2008, à 09:38
- ydethe
Re : [Résolu] Comparaison dans bash
En fait j'ai toujours un problème
Le script donné par gilbert marche, mais ce que je voulais, à l'origine, c'est exécuter ça:
a=$(ping -c1 google.fr)
b="ping: unknown host google.fr"
if [ "${a}" = "${b}" ]; then
echo "Non connecté"
fi
Et visiblement il y a un problème de "typage" (même si je sais bien qu'il n'y a pas vraiment de types)
Le but de ce script est de détecter si je suis connecté à Internet
Merci de votre aide!
Dernière modification par ydethe (Le 29/01/2008, à 09:38)
Hors ligne
#6 Le 29/01/2008, à 10:18
- Gari
Re : [Résolu] Comparaison dans bash
Je pense que tu devrais plutà´t utiliser le code retour de la fonction 'ping' pour faire ça.
Par exemple:
ping -c1 -w1 -q google.fr > /dev/null 2> &1
if [[ $? == 0 ]] then
echo "Je suis connecté"
else
echo "Je ne suis pas connecté"
fi
le "w1" permet de faire en sorte que le ping ne dure qu'une seconde (bon, ça veut dire que si ta connexion est lente ça va être dur, mais après tu peux affiner, voire enlever l'option w). Le -q signifie que tu veux que le minimum de choses s'affichent.
Les redirections de fin de fonction permettent de ne rien voir à l'écran.
Le $? est une variable spéciale contenant le résultat de la dernière fonction bash lancée, ici "ping". Elle vaut 0 si le ping a réussi et autre chose (peut-être 1) sinon.
Dernière modification par Gari (Le 29/01/2008, à 10:19)
Hors ligne
#7 Le 29/01/2008, à 10:24
- Gari
Re : [Résolu] Comparaison dans bash
Il y a même plus simple, c'est d'embarquer directement la commande ping dans le test:
if ping -c1 -w1 -q google.fr > /dev/null 2> /dev/null; then
echo "Je suis connecté"
else
echo "Je ne suis pas connecté"
fi
Je laisse mon message précédent parce qu'il permet de comprendre le concept du $?, même s'il ne sert à rien ici.
Hors ligne
#8 Le 29/01/2008, à 10:45
- ydethe
Re : [Résolu] Comparaison dans bash
Merci pour vos réponses!
Hors ligne