#1 Le 24/10/2015, à 11:31
- sergeG75018
demande explications bash while et until
Bonjour.
J'ai l'impression d'avoir mal compris le fonctionnement des boucle while et until
Moi j'ai compris:
tant que la condition n'est pas validée on reste dans la boucle quand la condition est validée on sort de la boucle sans tenir compte de la suite de cette boucle pour arriver a la suite de "done"
J'ai besoin de tester si une variable est vide ou non vide pour cela j'ai 2 possibilités.
tester si ma variable est vide
test -z "$var"
ou non vide
test -n "$var"
Je lance mon test:
while [ -z "$var" ] #pendant que var est vide on continu
do
var="" #$var est vide, on continu
echo "$var"
var="" #$var est vide on continu
echo "$var"
var="quelque chose" #var est non vide, on sort de la boucle et on lance la suite soit echo "$var" qui devrait être "quelque chose"
echo "$var"
var="autre chose" #on en tient pas compte
echo "$var"
var="encore autre chose" #on en tient pas compte
echo "$var"
done
echo "Ça marche pas"
On peut faire la même chose avec until
until test -n "$var" #jusqu'a ce que var ne soit pas non vide on continu
do
var="" #$var est vide, on continu
echo "$var"
var="" #$var est vide on continu
echo "$var"
var="quelque chose" #var est non vide, on sort de la boucle et on lance la suite soit echo "$var" qui devrait être "quelque chose"
echo "$var"
var="autre chose" #on en tient pas compte
echo "$var"
var="encore autre chose" #on en tient pas compte
echo "$var"
done
echo "Ça marche pas"
Ma question est donc: Qu'est-ce que je n'ai pas compris.
Merci d'avance.
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne
#2 Le 24/10/2015, à 12:12
- pingouinux
Re : demande explications bash while et until
Bonjour,
Le test se fait en début de boucle, et le fait de modifier var dans la boucle ne change rien. Ce n'est qu'au début de la boucle suivante que la modification sera prise en compte.
Remarque :
until test -n "$var" #jusqu'a ce que var ne soit pas non vide on continu
En réalité, c'est
until test -n "$var" #jusqu'a ce que var soit non vide on continue
Tu peux tester comme ceci :
while [ -z "$var" ] #pendant que var est vide on continue
do
read -p "Entrer var : " var
echo "$var"
done
until test -n "$var" #jusqu'a ce que var soit non vide on continue
do
read -p "Entrer var : " var
echo "$var"
done
Dernière modification par pingouinux (Le 24/10/2015, à 15:40)
Hors ligne
#3 Le 24/10/2015, à 14:20
- sergeG75018
Re : demande explications bash while et until
Re.
Bon, j'ai réussi a faire ce que je voulais mais je trouve cela bien compliqué pour arriver à ce résultat. Il y-a surement une méthode plus simple.
test1=""
echo "$test1"
test2=""
echo "$test2"
test3="quelque chose"
echo "$test3"
test4="autre chose"
echo "$test4"
until test -n "$var" #jusqu'a ce que var ne soit non vide on continue
do
num=$((num+1))
eval var="\"\$test$num\""
echo "$var"
done
echo "le contenu de ma variable est: $var"
Merci à toi et à bientot.
Dernière modification par sergeG75018 (Le 24/10/2015, à 14:50)
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne
#4 Le 24/10/2015, à 15:49
- pingouinux
Re : demande explications bash while et until
Tu peux faire comme ceci :
test_n=( "" "" "quelque chose" "autre chose" )
for var in "${test_n[@]}"
do
echo "=$var="
[ -n "$var" ] && break
done
echo "le contenu de ma variable est: $var"
et voici le résultat
==
==
=quelque chose=
le contenu de ma variable est: quelque chose
Hors ligne
#5 Le 24/10/2015, à 18:03
- sergeG75018
Re : demande explications bash while et until
Si j'ai bien compris tu considère test_n comme un tableau
l'indice [@] fait que peu importe ce qu'il y-a dans la cellule, s'il y-a quelque chose se sera un mot "quelque chose" est un mot" @]){#" est un mot et "/chemin/vers/quelque chose" est un mot et s'il n'y-a rien c'est vide.
Puis tu lance ta boucle for normalement.
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne
#6 Le 24/10/2015, à 19:22
- pingouinux
Re : demande explications bash while et until
Si j'ai bien compris tu considère test_n comme un tableau
test_n est un tableau.
for var in "${test_n[@]}"
var va prendre successivement pour valeur les éléments du tableau, en gérant les espaces correctement.
[ -n "$var" ] && break
Le test s'effectue ici : si la longueur du contenu de var est différente de zéro, on sort de la boucle (break).
Hors ligne
#7 Le 24/10/2015, à 20:24
- sergeG75018
Re : demande explications bash while et until
Merci beaucoup pour ces explications, j'ai un peu abusé ce soir mais, je reviendrai incessamment sous peu, mon script n'est pas fini.
bye.
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne
#8 Le 24/10/2015, à 21:13
- Rufus T. Firefly
Re : demande explications bash while et until
A tout hasard : la bible de bash. Et c'est en français...
La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme
Hors ligne