GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Scripting Part2 - Boucles For et While avec exemples

Dans la première partie de ce didacticiel sur les scripts Bash, nous avons expliqué comment écrire un script Bash. Nous avons exploré les différentes utilisations et les scénarios uniques dans lesquels les scripts Bash peuvent être utiles, ce qui en fait un excellent exemple de leur incroyable efficacité.

Dans cette partie du didacticiel, nous allons examiner le for commande, et la commande while commande. Nous allons montrer comment nous pouvons utiliser ces commandes pour créer des boucles pour itérer sur une série de valeurs.

La boucle For

Sous Linux, une boucle est ce que nous utilisons pour exécuter des commandes à un intervalle spécifié de manière répétée. Les boucles sont utilisées dans une grande variété de langages de programmation dans le même but.

Il existe plusieurs types de boucles différents dans Linux, mais dans cette section de l'article, nous nous concentrerons sur le for boucle.

#!/bin/bash

 for y in a b c d w x y z 

> do

> echo $y

done

Comme vous pouvez le voir dans la capture d'écran ci-dessus, nous avons attribué la variable "y" - qui n'est qu'un espace réservé sans signification utilisé pour la commande - à quelques lettres de l'alphabet.

Nous avons ensuite passé cette variable au echo commande, et il a pu sortir nos lettres ci-dessous.

Itérer sur des valeurs simples

Nous pouvons utiliser le for commande dans un script Bash. Pour ce faire, nous devons d'abord créer un fichier texte dans notre terminal Linux. Vous pouvez utiliser le touch commande pour créer facilement des fichiers texte.

$ touch script

La syntaxe ci-dessus créera un fichier texte que nous appellerons "script". Assurez-vous de créer votre fichier texte en utilisant le .sh extension de fichier. Lors de la création de script , nous voudrons éditer dans notre script réel contenant le for commande.

Nous pouvons y parvenir en exécutant quelques commandes d'édition de fichiers texte différentes, telles que nano commande, et la commande vi commande, etc.

Mais nous vous recommandons d'utiliser nano , car c'est l'un des éditeurs de texte de commande les plus simples et les plus faciles à utiliser sous Linux.

$ nano script

La syntaxe ci-dessus ouvrira notre script dans l'éditeur de texte nano. Ici, nous voudrons taper notre script.

Notez que ce fichier texte doit contenir #!/bin/bash , qui informe le script Bash du shell à utiliser, il s'agit donc d'un élément essentiel de la création réussie d'un script Bash.

#!/bin/bash

for var in first second third fourth fifth; do

	echo The $var item

done

Itération sur des valeurs complexes

Dans l'exemple précédent, nous avons montré comment utiliser for commande pour itérer sur des valeurs simples dans un script Bash créé par l'utilisateur. Le mot simple ici fait référence à des valeurs qui ne contiennent qu'un seul mot.

Mais parfois, vous aurez une liste qui comprend - au lieu de ce que nous avons vu dans l'exemple précédent avec "premier" - quelque chose comme "le premier", qui contient plus d'un mot pour une seule valeur. Ces valeurs sont ce que nous appelons des valeurs "complexes".

Si votre liste contient ces valeurs complexes, vous devrez les référencer en les entourant de guillemets, afin que le script comprenne qu'il ne s'agit que d'une seule valeur.

#!/bin/bash

for var in first "the second" "the third" "I’ll do it"; do

	echo "This is: $var"

done

Substitution de commande

Nous pouvons également utiliser la substitution de commande dans notre for commande dans notre script Bash.

#!/bin/bash

my_file="file01"

for var in $(cat $my_file); do

        echo " $var"

done

Ici, nous avons utilisé la substitution de commande avec un sous-shell Bash, comme le montre l'utilisation de la commande cat à l'intérieur de $( ); cela nous permet d'utiliser la sortie du cat commande et obtenir le contenu du fichier en supposant que chaque ligne contient un mot.

Mais s'il y a des espaces dans l'une de ces lignes, chaque mot sera considéré comme un champ. Dans ce cas, vous devrez indiquer au shell de traiter les nouvelles lignes comme un séparateur au lieu d'espaces.

Le séparateur de champs

Par défaut, les caractères suivants sont considérés comme des champs par le shell Bash.

  • Espace
  • Onglet
  • nouvelle ligne

Si votre texte comprend l'un de ces caractères, le shell supposera qu'il s'agit d'un nouveau champ et vous devrez modifier le séparateur de champ interne ou la variable d'environnement IFS si vous avez besoin d'utiliser ces caractères.

$ IFS=$’n’

La syntaxe ci-dessus amènera le shell Bash à considérer les nouvelles lignes comme un séparateur au lieu d'un espace.

#!/bin/bash

file="/etc/passwd"

IFS=$'n'

for var in $(cat $file); do

	echo " $var"

done

Vous pouvez également affecter le séparateur de champs aux deux-points avec IFS comme indiqué ci-dessous.

$ IFS=:

Plutôt fantastique, hein ?

Itération sur les fichiers de répertoire

Vous pouvez également utiliser le for boucle dans un script Bash pour lister les fichiers de votre répertoire personnel.

#!/bin/bash

for obj in /home/ubuntu/*; do

	if [ -d "$obj" ]; then

		echo "$obj is a folder"

	elif [ -f "$obj" ]; then

		echo "$obj is a file"

	fi

done

Ce processus nécessite que vous utilisiez le if déclaration pour vérifier les fichiers et les dossiers. Mais cela ne devrait pas vous poser trop de problème si vous avez lu le post précédent. Mais si par hasard vous avez besoin d'un rappel, je vous recommande de le revoir.

Nous avons utilisé un caractère générique appelé astérisque (*) dans notre script Bash qui contient un for boucle qui nous permet de lister les fichiers et dossiers de notre répertoire personnel. Dans les scripts Bash, ce processus s'appelle "globbing de fichiers .” Le regroupement de fichiers signifie tous les fichiers existants avec un nom.

Notez que les variables dans notre if instruction sont écrits avec des guillemets car les noms de fichiers ou de dossiers peuvent contenir des espaces. Si nous avions omis cette étape, nous n'aurions peut-être pas été en mesure de répertorier tous les fichiers et répertoires.

Itérer sur les lignes de fichier

Nous pouvons utiliser le for boucle dans un script Bash pour parcourir le contenu du fichier :

#!/bin/bash

IFS=$'n'

for text in $(cat /etc/passwd); do

	echo "This line $text ++ contains"

	IFS=:

	for field in $text; do

		echo " $field"

	done
done

Ici, nous avons deux boucles, la première boucle itère sur les lignes du fichier, et le séparateur est la nouvelle ligne, la deuxième itération est sur les mots sur la ligne elle-même, et le séparateur est le deux-points :

données de fichier

Vous pouvez appliquer cette idée lorsque vous avez un fichier CSV ou tout autre fichier de valeurs séparées par des virgules. L'idée est la même; il vous suffit de changer le séparateur pour l'adapter à vos besoins.

Pour la boucle de style C

Si vous êtes familier avec le langage C, vous remarquerez peut-être qu'il y a quelque chose qui cloche dans for boucle parfois sous Linux.

C'est parce qu'il existe deux manières d'écrire for boucles; la méthode Linux standard, que nous avons déjà abordée au début de ce didacticiel, et la méthode "style C".

for (var= 0; var < 5; var++)

{

printf(“number is %dn”, var);

}

La syntaxe ci-dessus est pour le for boucle écrite en C. Le style C for La boucle sous Linux est écrite de manière très similaire à celle-ci avec quelques petites modifications, qui peuvent être observées ci-dessous.

pour (( variable =début; condition; pas d'itération))

for (( var = 1; var < 5; var++ ))

Pour aider à mieux peindre l'image, nous inclurons un exemple de script Bash utilisant le style C for boucle dans notre terminal Linux.

#!/bin/bash

for ((var = 1; var <= 10; var++)); do

	echo "number is $var"

done

Mettez ceci dans notre fichier texte et lancez-le.

La commande Continuer

Le Bash continue commande ignore les commandes à l'intérieur de la boucle externe pour l'itération en cours et donne le contrôle à la suivante. Vous pouvez utiliser cette commande pour arrêter l'exécution des commandes restantes à l'intérieur d'une boucle sans quitter la boucle.

Dans les deux exemples suivants, nous verrons comment cette commande peut être utilisée dans les boucles de script Bash sous Linux.

La commande Break

Vous pouvez utiliser la commande break pour sortir de n'importe quelle boucle, comme les boucles while et until.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

La boucle s'exécute jusqu'à ce qu'elle atteigne 14, puis la commande quitte la boucle.
Nous aborderons d'autres exemples de cette commande un peu plus tard.

La boucle While

La boucle for n'est pas le seul moyen de boucler dans les scripts Bash. Le while loop fait le même travail, mais il vérifie une condition avant chaque itération. La structure du while boucle peut être vu ci-dessous.

while [ condition ]

do

    commands

done

Nous allons fournir un exemple avec un script Bash.

#!/bin/bash

number=10

while [ $number -gt 4 ]; do

	echo $number

	number=$(($number - 1))

done

Le fonctionnement de ce script Bash est simple; il commence par le while pour vérifier si le nombre est supérieur à zéro, il exécutera la boucle et la valeur du nombre sera diminuée à chaque fois de 1. À chaque itération de la boucle, le script imprimera la valeur du nombre. La boucle s'exécutera jusqu'à ce que ce nombre atteigne 0.

Boucles imbriquées

Vous pouvez créer des boucles à l'intérieur d'autres boucles, comme le while boucle par exemple. Ces boucles à l'intérieur d'une boucle sont appelées boucles imbriquées. Nous allons plonger dans ceux-ci en examinant d'abord comment créer un for imbriqué boucle dans l'exemple suivant.

Plusieurs boucles for (imbriquées pour)

Dans les exemples précédents de ce didacticiel, nous avons montré comment créer for boucles dans un script Bash sous Linux. Mais il existe aussi quelque chose que nous appelons imbriqué for boucles. Ce sont des boucles dans d'autres boucles, ou simplement plusieurs boucles, pour faire simple.

Nous allons vous montrer un exemple simple de ce à quoi cela ressemble, ainsi qu'un bref examen et une description ci-dessous.

for y in a b c d e f

do

    for u in a b c d e f

    do

        echo "$y$u"

    done

done

Comme vous pouvez le voir dans la capture d'écran ci-dessus, la sortie que nous recevons lors de l'exécution de notre script dans le terminal de ligne de commande Linux se lit comme suit :notre exemple de texte dans chaque for boucle est "a b c d e f".

Notre script fait écho au texte de la boucle externe à côté du texte de la boucle interne.

Le script continue à générer le premier champ (dans ce cas, les espaces, nous l'expliquerons un peu plus tard) du texte dans la boucle externe jusqu'à ce que chaque champ contenu dans la boucle interne ait été généré.

À la fin de la sortie de la boucle interne, notre script Bash commencera alors à produire le champ suivant du texte dans la boucle externe.

Tout ce processus sera répété jusqu'à ce que chaque champ de chaque boucle ait été complètement imprimé dans la sortie de votre terminal Linux.

Boucle while multiple (while imbriqué)

Comme le for imbriqué boucles de commande, il existe aussi des while imbriqués boucles de commande. Celles-ci fonctionnent exactement de la même manière que les boucles imbriquées pour le for commande; une boucle à l'intérieur d'une autre boucle.

La syntaxe ci-dessous aura une ressemblance frappante avec le while normal boucle, comme la structure d'un while imbriqué loop est simplement une forme développée de la base while boucle, qui peut être observée dans la syntaxe ci-dessous.

while [condition]

do 

  statements1 

  statements2

  while [condition]

do

  continue

done

  statements3

done

La syntaxe ci-dessus effectuera des tâches spécifiées jusqu'à ce que les conditions que vous avez sélectionnées soient remplies. C'est ce qu'on appelle une boucle. Mais puisque la boucle dans l'exemple ci-dessus est imbriquée, cela signifie que l'une des tâches que nous avons mentionnées ci-dessus est une autre boucle elle-même.

En attendant

Nous avons montré comment le while boucle et le for loop peut être très utile pour exécuter des processus complexes à l'aide de scripts Bash sous Linux.

Mais parfois, pour diverses raisons, vous devrez tuer l'une des boucles de votre script Bash. Ce scénario, aussi brutal que cela puisse paraître, se produit souvent dans le travail d'administration système. Donc, vous voudrez peut-être vous familiariser avec ce concept.

Dans le shell Bash, le break commande et le continue La commande peut fournir les outils nécessaires pour contrôler le flux de vos boucles de script Bash.

Nous allons montrer comment ces commandes fonctionnent individuellement avec quelques exemples ci-dessous.

La syntaxe pour utiliser le brea commande pour quitter un while boucle est la suivante :

$  while [ condition ]
do
    commands
continue
done

Le continue commande break la commande fonctionne de manière très similaire et peut être considérée comme opposée l'une à l'autre; le continue la commande fonctionne exactement comme la break commande, seulement elle continue la boucle au lieu de la tuer.

Quitter la boucle While

La break commande tue la boucle en cours et donne le contrôle à la commande suivante suivant cette boucle. Vous pouvez utiliser ce processus pour sortir de boucles telles que for ,while , etc. La syntaxe du break commande est la suivante :

$ while [ condition ]
do
    commands
break
done

Mais comme nous l'avons mentionné ci-dessus, à la fois le continue commande et la break La commande peut être utilisée pour d'autres boucles de script Bash en plus de while boucle. Nous montrerons comment les utiliser dans le for boucle.

Quitter la boucle

Vous pouvez utiliser ces commandes de contrôle de boucle dans un for boucle. Nous utiliserons le break commande pour quitter le for boucle dans notre script Bash.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

Le for boucle s'exécute jusqu'à ce qu'elle atteigne le nombre que nous avons spécifié dans le script bash, qui est 14. Une fois le nombre spécifié atteint, le break la commande quittera le for boucle.

Instruction Break If

Nous venons de montrer comment utiliser break commande pour quitter for boucles, mais nous pouvons également utiliser cette commande pour quitter le if déclaration à l'intérieur de ces boucles de script Bash.

i=0

while [[ $i -lt 10 ]]

do

  echo "Number: $i"

  ((i++))

  if [[ $i -eq 5 ]]; then

    break

  fi

done

Continuer la déclaration

Nous faisons la même chose que nous avons fait dans l'exemple précédent avec le continue commande comme nous l'avons fait avec le break commande dans un while boucle dans un script Bash.

i=0

while [[ $i -lt 10 ]]; do

  ((i++))

  if [[ "$i" == '5' ]]; then

    continue

  fi

  echo "Number: $i"

done

Réflexions finales

J'espère que vous avez appris une nouvelle chose ou deux. Ou, à tout le moins, j'espère que vous avez pu revoir ce que vous savez déjà. Mes derniers mots aujourd'hui pour vous seraient de continuer à lire et à pratiquer.

Merci.


Linux
  1. Tutoriel Bash HereDoc avec exemples

  2. Bash For Loop Guide et exemples

  3. Script Linux :3 tutoriels pour les boucles while dans Bash

  4. Exemples de boucle Bash For et de boucle While

  5. '&&' vs '&' avec la commande 'test' dans Bash

Bash Scripting - Boucle For expliquée avec des exemples

Bash Scripting - Fonctions expliquées avec des exemples

Bash Scripting - Variables expliquées avec des exemples

Bash Scripting - Commande Printf expliquée avec des exemples

Bash Scripting - Tableau associatif expliqué avec des exemples

Bash For Loops avec des exemples