#1 Le 10/12/2015, à 10:44
- Gaara
[BASH] boucle while en testant une chaine (résolu)
Salut à tous,
Je cherche à comparer une chaine de caractère avec une autre, en faisant une boucle:
Tant que "mot" est dans ma chaine, attendre et refaire le test.
J'ai donc écrit ça mais ça ne semble pas fonctionner:
while [ "$CHAINE" == "mot" ]
do
sleep 2
test (récupération nouvelle chaine)
done
Qu'est ce qui ne va pas?
Merci
Dernière modification par Gaara (Le 10/12/2015, à 12:08)
Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid
<code>zenity --question --title "Alert" --text "Microsoft Windows has been found! Would you like to remove it?"</code>
Hors ligne
#2 Le 10/12/2015, à 11:12
- Watael
Re : [BASH] boucle while en testant une chaine (résolu)
salut,
« ça ne semble pas fonctionner » = « ça marche pas »
-> c'est pas la description la plus précise de ce que tu attends, et de ce qui se passe
d'abord == n'est pas POSIX; bash le tolère (ça ne provoque pas de faute, contrairement à dash) avec la commande test, mais, àmha, il ne devrait être utilisé qu'avec [[.
dans un test simple ( [ ... ] ), la chaîne à droite doit être identique à celle de gauche, et non incluse/comprise dedans.
il faudrait utiliser un test avancé ( [[ ... ]] )
motif="*mot*"
[[ "chaîne avec mot dedans" == $motif ]] && echo ok || echo ko
ok
et puis, il faut qu'à un moment $chaine soit modifiée pour sortir de la boucle.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 10/12/2015, à 11:15
- pingouinux
Re : [BASH] boucle while en testant une chaine (résolu)
Bonjour,
Déjà, test est une commande qui existe.
Si tu ne modifies pas CHAINE dans la boucle, soit tu n'y passes pas, soit tu n'en sors jamais.
Hors ligne
#4 Le 10/12/2015, à 11:17
- Gaara
Re : [BASH] boucle while en testant une chaine (résolu)
@Watael:
oui désolé, en fait le script sort de la boucle même si "mot" est dans la chaine.
Je vais tester ça, merci
@pingouinux
oui le test modifie bien la chaine en question (avec un sleep 2), et la boucle continue ainsi jusqu'à ce que "mot" n'apparaisse plus
J'ai modifié mon premier message.
Dernière modification par Gaara (Le 10/12/2015, à 11:47)
Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid
<code>zenity --question --title "Alert" --text "Microsoft Windows has been found! Would you like to remove it?"</code>
Hors ligne
#5 Le 10/12/2015, à 11:51
- Gaara
Re : [BASH] boucle while en testant une chaine (résolu)
Bon, je ne m'en sort pas
Je met mon code réel, ça teste si je suis connecté en VPN avant de lancer un logiciel
IP=$(wget http://ipinfo.io/ip -qO -)
LIEU=$(/usr/bin/host $IP)
motif=*$LIEU*
while [[ "fr" == $motif ]]
do
sleep 2
IP=$(wget http://ipinfo.io/ip -qO -)
LIEU=$(host $IP)
echo $LIEU
motif=*$LIEU*
done
notify-send "$LIEU"
Mais ça ne fonctionne toujours pas, il sort de la boucle alors qu'il ne devrait pas
Ah désolé j'ai vu une erreur je remodifie -> ça ne fonctionne toujours pas
Dernière modification par Gaara (Le 10/12/2015, à 11:56)
Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid
<code>zenity --question --title "Alert" --text "Microsoft Windows has been found! Would you like to remove it?"</code>
Hors ligne
#6 Le 10/12/2015, à 12:01
- pingouinux
Re : [BASH] boucle while en testant une chaine (résolu)
Si tu veux tester si $motif contient fr, tu dois faire ceci
while [[ $motif =~ fr ]]
Hors ligne
#7 Le 10/12/2015, à 12:07
- Gaara
Re : [BASH] boucle while en testant une chaine (résolu)
Ah oui ! Merci bcp, ça fonctionne maintenant.
Comme toujours tu me sauves la mise.
résolu !
Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid
<code>zenity --question --title "Alert" --text "Microsoft Windows has been found! Would you like to remove it?"</code>
Hors ligne
#8 Le 10/12/2015, à 12:24
- tiramiseb
Re : [BASH] boucle while en testant une chaine (résolu)
Petite remarque en passant : à ta place, je regarderais les routes plutôt que de regarder l'IP publique... c'est moins lourd et ça ne fait pas un timeout si le net est injoignable.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 10/12/2015, à 12:29
- Gaara
Re : [BASH] boucle while en testant une chaine (résolu)
Oui, merci tiramiseb, je n'y avait pas pensé, à part la seconde partie.
Pour le moment, si le net est injoignable, je fais ça:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
code précédent
else
sleep 10
//puis je relance le script
exit 0
fi
Pour tester les routes, je ne sais pas trop faire. (je ne sais même pas ce que c'est, mais je vais étudier ça!)
Merci
Dernière modification par Gaara (Le 10/12/2015, à 12:30)
Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid
<code>zenity --question --title "Alert" --text "Microsoft Windows has been found! Would you like to remove it?"</code>
Hors ligne
#10 Le 10/12/2015, à 12:31
- tiramiseb
Re : [BASH] boucle while en testant une chaine (résolu)
Tu fais "ip route | grep ^default"
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#11 Le 10/12/2015, à 12:35
- Gaara
Re : [BASH] boucle while en testant une chaine (résolu)
ah oui
effectivement c'est plus simple!
merci
Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid
<code>zenity --question --title "Alert" --text "Microsoft Windows has been found! Would you like to remove it?"</code>
Hors ligne