Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

ydethe a écrit :

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