Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
bash_base_2 [2020/03/11 16:24] – echo nekanbash_base_2 [2021/03/05 16:17] (Version actuelle) nekan
Ligne 1: Ligne 1:
-~~CLOSETOC~~ +====== Boucles & HereDoc ====== 
-====== Boucles ====== +<label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2020/03/11 16:25// 
- +<callout type="warning" icon="true" title="Boucle infinie">Attention. Comme pour tout langage, prévoyez toujours une porte de sortie quand vous utilisez des boucles et ce afin d'éviter de créer des boucles infinies.</callout>
-<note important>Attention. Comme pour tout langage, prévoyez toujours une porte de sortie quand vous utilisez des boucles et ce afin d'éviter de créer des boucles infinies.</note>+
  
 ===== Boucles à séquence définie ===== ===== Boucles à séquence définie =====
Ligne 12: Ligne 11:
 <sxh bash>for I in $(seq 1 10) <sxh bash>for I in $(seq 1 10)
 do do
 +    echo "$I"
 +done
 +
 +for FILE in $(ls)
 +do
 +   du $FILE
 +done 
 +</sxh>
 +
 +''for'' peut avoir une autre écriture dans laquelle on indique la valeur initiale du compteur, une condition mathématique incluant le compteur et égale à 0 et le pas du compteur. 
 +
 +<sxh bash>for ((I=0 ; 10 - $I ; I++))
 +do
 +    echo "$I"
 +done
 +</sxh>
 +
 +===== Boucles à séquence variable =====
 +
 +Les boucles à séquence variable représente les boucles dont la quantité d'occurrence n'est pas définie au préalable.
 +
 +==== while, do, done ====
 +
 +''while'' exécute un bloc d'instruction **tant que** sa condition est ''vraie''.
 +
 +<sxh bash>I=1
 +while [[ $I -lt 10 ]]
 +do
 +    echo "$I"
 +    I=$(($I + 1))
 +done
 +</sxh>
 +
 +''while'' peut être aussi utilisé pour appliquer un traitement à toute les lignes d'un fichier grâce à l'instruction ''read'' et l'injection du fichier en question.
 + 
 +<sxh bash>while read LINE
 +do
 +    echo "$LINE" | wc -m
 +done < /home/user/test.txt
 +</sxh>
 +
 +==== until, do, done ====
 +
 +''until'' exécute un bloc d'instruction **jusqu'à ce que** sa condition soit ''vraie''.
 +
 +<sxh bash>I=1
 +until [[ $I -eq 10 ]]
 +do
 +    echo "$I"
 +    I=$(($I + 1))
 +done
 +</sxh>
 +
 +====== HereDoc ======
 +
 +Quand on écrit des script, on a parfois besoin d'écrire des instructions sur plusieurs lignes pour clarifier le code ou afficher un texte long ou encore envoyer un bloc de commande via SSH, etc... Cependant, en temps normal, un retour à la ligne équivaux à une nouvelle instruction. C'est là qu'intervient le ''HereDoc''. Il permet de délimiter le début et la fin d'un bloc qui sera alors lu comme un seul élément par la commande précédant le ''HereDoc''.
 +
 +Le début du bloc est spécifié par ''<<'' suivi d'une balise, généralement ''EOF'' qui signifie **E**nd **O**f **F**ile. La fin du bloc se fait par une nouvelle écriture de la balise sur une ligne séparée sans autre caractères, tabulations, espace... 
 +
 +Pour des besoins de clarté dans un script, ''<<'' peut être remplacé par ''<<-'' ce qui aura pour effet d'ignorer les tabulations en début de ligne et ainsi préservé l'indentation du script.
 +
 +<sxh bash># Exemple 1
 +cat << EOF
 +test
 +    test2
 +    EOF
 +EOF
 +
 +# Affichera
 +test
 +    test2
 +    EOF
 +    
 +# Le premier EOF n'est pas interprété car il est précédé d'une tabulation alors que le second est seul sur sa ligne.
 +
 +# Exemple 2
 +cat <<- EOF
 +test
 +    test2
 +    EOF
 +EOF
 +
 +# Affichera
 +test
 +test2
 +-bash: EOF : commande introuvable
 +
 +# Les tabulations ont été ignorées et du fait le premier EOF a terminé le bloc. Le second a donc était interprété comme une commande d'où l'affichage d'une erreur
 +</sxh>
 +
 +~~DISCUSSION~~
 +
  
  • bash_base_2.1583940293.txt.gz
  • Dernière modification : 2020/03/11 14:24
  • (modification externe)