Contrôle des processus Shell
Contrairement à Java, PHP et d'autres langages, le contrôle de processus de sh ne peut pas être vide, tel que (voici comment écrire le contrôle de processus PHP) :
<?php if (isset($_GET["q"])) { search(q); } else { // 不做任何事情 }
Ceci ne peut pas être écrit en sh /bash S'il n'y a aucune instruction à exécuter dans la branche else, n'écrivez pas ceci autrement.
if else
if
format de syntaxe de l'instruction if :
if condition then command1 command2 ... commandN fi
écrit sur une seule ligne (applicable à l'invite de commande du terminal) :
Le fi à la fin deif [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
est s'il est orthographié à l'envers. Vous en rencontrerez des similaires plus tard.
if else
if else Format de grammaire :
if condition then command1 command2 ... commandN else command fi
if else-if else
if else-if else Format de grammaire :
if condition1 then command1 elif condition2 then command2 else commandN fi
L'exemple suivant détermine si deux variables sont égales :
a=10 b=20 if [ $a == $b ] then echo "a 等于 b" elif [ $a -gt $b ] then echo "a 大于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo "没有符合的条件" fi
Résultat de sortie :
a 小于 b
l'instruction if else est souvent utilisée conjointement avec la commande test, comme indiqué ci-dessous :
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi
Résultat de sortie :
两个数字相等!
for loop
Similaire à 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 est dans la liste, la boucle for exécute toutes les commandes Une fois et utilise le nom de la variable pour obtenir list Valeur actuelle de . La commande peut être n’importe quelle commande et instruction shell valide. La liste d'entrée peut contenir des remplacements, des chaînes et des noms de fichiers. La liste
in est facultative Si elle n'est pas utilisée, la boucle for utilise les paramètres de position de la ligne de commande.
Par exemple, affichez les nombres dans la liste actuelle dans l'ordre :
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
Résultat de la 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 de la chaîne dans l'ordre :
for str in 'This is a string' do echo $str done
Résultat de sortie :
This is a string
l'instruction while
la boucle while est utilisée pour exécuter en continu une série de commandes et est également utilisée pour lire les données des fichiers d'entrée. Les commandes sont généralement des conditions de test ; . Le format 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, alors la condition renvoie vrai. int commence à 0 et augmente de 1 à chaque fois que la boucle est traitée. Exécutez le script ci-dessus, renvoyez les nombres 1 à 5, puis terminez.
#!/bin/sh int=1 while(( $int<=5 )) do echo $int let "int++" done
Exécutez le script, sortie :
1 2 3 4 5
La commande Bash let est utilisée, qui est utilisée pour exécuter une ou plusieurs expressions. Il n'est pas nécessaire d'ajouter $ pour représenter les variables dans les calculs de variables. . Pour plus de détails, veuillez vous référer à : Commande Bash let
.La boucle While peut être utilisée pour lire les informations du clavier. Dans l'exemple suivant, les informations d'entrée sont définies sur la variable FILM et appuyer sur <Ctrl-D> termine la boucle.
echo '按下 <CTRL-D> 退出' echo -n '输入你最喜欢的电影名: ' while read FILM do echo "是的!$FILM 是一部好电影" done
Exécutez le script, le résultat est similaire à ce qui suit :
按下 <CTRL-D> 退出 输入你最喜欢的电影名: w3cschoolphp中文网 是的!w3cschoolphp中文网 是一部好电影
Boucle infinie
Format de syntaxe de boucle infinie :
while : do command done
ou
while true do command done
ou
for (( ; ; ))
jusqu'à ce que la boucle
jusqu'à ce que la boucle exécute une série de commandes jusqu'à ce que la condition soit vraie et s'arrête.
Les méthodes de traitement des boucles jusqu'à et pendant que les boucles sont exactement opposées.
En général, les boucles while sont meilleures que les boucles jusqu'à, mais parfois, et seulement dans de rares cas, les boucles jusqu'à ce que soient plus utiles.
jusqu'à Format de syntaxe :
until condition do command done
La condition peut être n'importe quelle condition de test. Le test a lieu à la fin de la boucle, donc la boucle est exécutée au moins une fois - veuillez noter ceci.
case
L'instruction Shell case est une instruction à sélection multiple. Vous pouvez utiliser des instructions case pour faire correspondre une valeur et un modèle. Si la correspondance réussit, la commande correspondante est exécutée. Le format de la déclaration de cas est le suivant :
Le cascase 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
fonctionne comme indiqué ci-dessus. La valeur doit être suivie du mot in et chaque modèle doit se terminer par une parenthèse droite. La valeur peut être une variable ou une constante. Une fois que la correspondance a révélé que la valeur correspond à un certain modèle, toutes les commandes commencent à être exécutées jusqu'à ;;. La valeur
détectera chaque modèle correspondant. Une fois le modèle correspondant, les autres modèles ne continueront pas après l'exécution de la commande correspondante du modèle correspondant. Si aucun des modèles ne correspond, utilisez l'astérisque * pour capturer la valeur et exécutez les commandes suivantes.
Le script suivant vous invite à saisir 1 à 4 pour correspondre à chaque modèle :
echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac
Entrez un contenu différent, il y aura des résultats différents, par exemple :
输入 1 到 4 之间的数字: 你输入的数字为: 3 你选择了 3
Sortez de la boucle
Pendant le processus de boucle, il est parfois nécessaire de forcer une sortie de boucle lorsque la condition de fin de boucle n'est pas atteinte. Shell utilise deux commandes pour réaliser cette fonction : break et continue. .
commande break
la commande break permet de sortir de toutes les boucles (terminer 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.
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done
exécute le code ci-dessus, le résultat de sortie est :
输入 1 到 5 之间的数字:3 你输入的数字为 3! 输入 1 到 5 之间的数字:7 你输入的数字不是 1 到 5 之间的! 游戏结束
continue
la commande continue est similaire à la commande break, avec une différence, elle ne sautera pas de tout boucles, seulement le cycle actuel.
Modifiez l'exemple ci-dessus :
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done
Exécutez le code et constatez que lorsqu'un nombre supérieur à 5 est saisi, la boucle dans cet exemple ne se terminera pas et l'instruction echo " Le jeu est terminé !" ne sera jamais exécuté.
esac
La syntaxe de case est très différente du langage de la famille C. Elle nécessite un esac (l'inverse de la casse) comme marque de fin, et chaque branche de case utilise un. parenthèse droite. Utilisez deux points-virgules pour indiquer une pause.