Contrôle de flux Shell
Contrairement à des langages tels que Java et PHP, le contrôle de flux en sh ne peut pas être vide. Par exemple (ce qui suit est la syntaxe de contrôle de flux PHP) :
Exemple
if (isset($_GET["q"])) {
search(q);
}
else {
// Ne rien faire
}
En sh/bash, vous ne pouvez pas l'écrire comme ceci. Si la branche else n'a aucune instruction à exécuter, n'écrivez pas ce else.
if else
if
syntaxe de l'instruction if :
if condition
then
command1
command2
...
commandN
fi
Écrit sur une ligne (applicable à l'invite de commande du terminal) :
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
Lefifinal estifépelé à l'envers ; vous en rencontrerez des similaires plus tard.
if else
syntaxe de if else :
if condition
then
command1
command2
...
commandN
else
command
fi
if else-if else
syntaxe de if else-if else :
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
Dans if else,[...]dans les instructions de comparaison, supérieur à utilise-gt, et inférieur à utilise-lt。
if [ "$a" -gt "$b" ]; then
...
fiSi vous utilisez((...))comme instruction de comparaison, supérieur à et inférieur à peuvent être utilisés directement>et<。
if (( a > b )); then
...
fi
L'exemple suivant vérifie si deux variables sont égales :
Exemple
b=20
if [ $a == $b ]
puis
echo "a equals b"
elif [ $a -gt $b ]
puis
echo "a est supérieur à b"
elif [ $a -lt $b ]
puis
echo "a est inférieur à b"
else
echo "Aucune condition correspondante"
fi
Sortie :
a 小于 b
En utilisant((...))comme instruction de comparaison :
Exemple
b=20
if (( $a == $b ))
puis
echo "a equals b"
elif (( $a > $b ))
puis
echo "a est supérieur à b"
elif (( $a < $b ))
puis
echo "a est inférieur à b"
else
echo "Aucune condition correspondante"
fi
Sortie :
a 小于 b
L'instruction if else est souvent utilisée avec la commande test, comme indiqué ci-dessous :
Exemple
num2=$[1+5]
if test $[num1] -eq $[num2]
puis
echo 'Les deux nombres sont égaux !'
else
echo 'Les deux nombres ne sont pas égaux !'
fi
Sortie :
The two numbers are equal!
boucle for
Comme dans d'autres langages de programmation, Shell prend en charge les boucles for.
Le format général d'une boucle for est :
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
Écrit sur une seule ligne :
for var in item1 item2 ... itemN; do command1; command2… done;
Lorsque la valeur de la variable se trouve dans la liste, la boucle for exécute toutes les commandes une fois, en utilisant le nom de la variable pour obtenir la valeur actuelle dans la liste. Les commandes peuvent être n'importe quelles commandes et instructions shell valides. La liste in peut contenir des substitutions, des chaînes de caractères et des noms de fichiers.
La liste in est facultative. Si vous ne l'utilisez pas, la boucle for utilise les paramètres positionnels de la ligne de commande.
Par exemple, affichez les nombres de la liste actuelle dans l'ordre :
Exemple
do
echo "La valeur est : $loop"
done
Sortie :
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
Affichez les caractères d'une chaîne dans l'ordre :
#!/bin/bash
for str in This is a string
do
echo $str
done
Sortie :
This is a string
Instruction while
La boucle while est utilisée pour exécuter en continu une série de commandes et aussi pour lire des données à partir d'un fichier d'entrée. Son format de syntaxe est :
while condition
do
command
done
Ce qui suit est une boucle while de base. La condition de test est : si int est inférieur ou égal à 5, la condition renvoie true. int commence à 1, et à chaque fois que la boucle s'exécute, int augmente de 1. L'exécution du script ci-dessus renvoie les nombres de 1 à 5, puis se termine.
Exemple
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
Exécutez le script, sortie :
1 2 3 4 5
L'exemple ci-dessus utilise la commande Bash let, qui sert à exécuter une ou plusieurs expressions. Dans les calculs de variables, vous n'avez pas besoin d'ajouter $ pour représenter les variables. Pour plus de détails, voir :commande let de Bash
。La boucle while peut être utilisée pour lire les entrées du clavier. Dans l'exemple suivant, l'entrée est affectée à la variable FILM, et appuyez sur <Ctrl-D> pour terminer la boucle.
Exemple
echo -n 'Entrez le nom de votre site web préféré : '
while read FILM
do
echo "Oui !$FILMest un bon site web"
done
Exécutez le script, la sortie est similaire à ce qui suit :
按下 <CTRL-D> 退出 输入你最喜欢的网站名:Example 是的!Example 是一个好网站
Boucle infinie
Format de syntaxe de boucle infinie :
while :
do
command
done
Or
while true
do
command
done
Or
for (( ; ; ))
boucle until
La boucle until exécute une série de commandes jusqu'à ce que la condition devienne vraie, puis s'arrête.
La boucle until est exactement l'opposé de la boucle while dans sa méthode de traitement.
Généralement, les boucles while sont meilleures que les boucles until, mais à certains moments—seulement dans de très rares cas—les boucles until sont plus utiles.
Format de syntaxe de until :
until condition
do
command
done
condition est généralement une expression conditionnelle. Si la valeur de retour est false, les instructions à l'intérieur du corps de la boucle continuent de s'exécuter ; sinon, elle sort de la boucle.
Dans l'exemple suivant, nous utilisons la commande until pour afficher les nombres 0 ~ 9 :
Exemple
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
Résultat de l'exécution :
Le résultat de sortie est:
0 1 2 3 4 5 6 7 8 9
case ... esac
case ... esacest une instruction à choix multiples, similaire à l'instruction switch ... case dans d'autres langages. Il s'agit d'une structure de sélection à branches multiples. Chaque branche case commence par une parenthèse fermante et se termine par deux points-virgules;;signifie break, c'est-à-dire que l'exécution se termine, et elle sort de toute l'instruction case ... esac. esac (qui est case épelé à l'envers) sert de marqueur de fin.
Vous pouvez utiliser l'instruction case pour faire correspondre une valeur à un motif. Si la correspondance réussit, la commande correspondante est exécutée.
case ... esacLe format de syntaxe est le suivant :
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
Le fonctionnement de case est comme indiqué ci-dessus. La valeur doit être suivie du motin, chaque motif doit se terminer par une parenthèse fermante. La valeur peut être une variable ou une constante. Après que la correspondance a trouvé que la valeur correspond à un motif, toutes les commandes comprises entre les deux commencent à s’exécuter jusqu’à;;。
La valeur sera comparée à chaque motif pour trouver une correspondance. Une fois qu’un motif correspond, après l’exécution des commandes correspondantes du motif trouvé, il ne continuera pas avec les autres motifs. Si aucun motif ne correspond, utilisez l’astérisque * pour capturer la valeur, puis exécutez les commandes suivantes.
Le script suivant demande une saisie de 1 à 4 et la compare à chaque motif :
Exemple
echo 'Le nombre que vous avez saisi est :'
read aNum
case $aNum in
1) echo 'Vous avez choisi 1'
;;
2) echo 'Vous avez choisi 2'
;;
3) echo 'Vous avez choisi 3'
;;
4) echo 'Vous avez choisi 4'
;;
*) echo 'Vous n’avez pas saisi de nombre entre 1 et 4'
;;
esac
Saisir un contenu différent produira des résultats différents, par exemple :
输入 1 到 4 之间的数字: 你输入的数字为: 3 你选择了 3
Le script suivant met en correspondance des chaînes :
Exemple
site="example"
case "$site" in
"example") echo "Tutoriel d'exemple"
;;
"google") echo "Recherche Google"
;;
"taobao") echo "Taobao"
;;
esac
Le résultat de sortie est:
Example
Sortir des boucles
Pendant une boucle, il est parfois nécessaire de forcer la sortie de la boucle avant que la condition de fin de boucle ne soit atteinte. Shell utilise deux commandes pour implémenter cette fonction :breaketcontinue。
commande break
La commande break permet de sortir de toutes les boucles (en terminant l'exécution de toutes les boucles suivantes).
Dans l'exemple suivant, le script entre dans une boucle infinie jusqu'à ce que l'utilisateur saisisse un nombre supérieur à 5. Pour sortir de cette boucle et revenir à l'invite du shell, vous devez utiliser la commande break.
Exemple
while :
do
echo -n "Entrez un nombre entre 1 et 5 :"
read aNum
case $aNum in
1|2|3|4|5) echo "Le nombre que vous avez saisi est$aNum!"
;;
*) echo "Le nombre que vous avez saisi n'est pas entre 1 et 5 ! Partie terminée"
break
;;
esac
done
Exécutez le code ci-dessus, la sortie est :
输入 1 到 5 之间的数字:3 你输入的数字为 3! 输入 1 到 5 之间的数字:7 你输入的数字不是 1 到 5 之间的! 游戏结束
continue
La commande continue est similaire à la commande break, à une différence près : elle ne sort pas de toutes les boucles, seulement de la boucle actuelle.
Modifiez l'exemple ci-dessus :
Exemple
while :
do
echo -n "Entrez un nombre entre 1 et 5 : "
read aNum
case $aNum in
1|2|3|4|5) echo "Le nombre que vous avez saisi est$aNum!"
;;
*) echo "Le nombre que vous avez saisi n'est pas compris entre 1 et 5 !"
continue
echo "Partie terminée"
;;
esac
done
L'exécution du code montre que lorsqu'un nombre supérieur à 5 est saisi, la boucle dans cet exemple ne se termine pas. L'instructionecho "Partie terminée"ne sera jamais exécutée.
Autres extensions