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 24/10/2015, à 12: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, à 13: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, à 16:40)

Hors ligne

#3 Le 24/10/2015, à 15: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, à 15:50)


Ironie, sarcasme ou cynisme? Je ne sais plus

Hors ligne

#4 Le 24/10/2015, à 16: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, à 19: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, à 20: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, à 21: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, à 22: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