English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Unlike languages such as Java and PHP, sh flow control cannot be empty, as shown below (this is the PHP flow control writing style):
<?php if (isset($_GET["q"])) { search(q); } else { // do nothing }
in sh/In bash, you can't write it like this, and if there are no statements to be executed in the else branch, don't write this else.
if statement syntax format:
if condition then command1 command2 ... commandN fi
written on one line (for terminal command prompt):
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
The final fi is the reverse spelling of if, and you will encounter similar ones later.
if else syntax format:
if condition then command1 command2 ... commandN else command fi
if else-if else syntax format:
if condition1 then command1 elif condition2 then command2 else commandN fi
The following example checks if two variables are equal:
a=10 b=20 if [ $a == $b ] then echo "a est égal à b" elif [ $a -gt $b ] then echo "a est supérieur à b" elif [ $a -lt $b ] then echo "a est inférieur à b" else echo "Aucune condition satisfaisante" fi
输出结果:
a est inférieur à b
if else statements are often used with the test command, as shown below:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi
输出结果:
两个数字相等!
与其他编程语言类似,Shell支持for循环。
for循环一般格式为:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
写成一行:
for var in item1 item2 ... itemN; do command1; command2... done;
当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。
in列表是可选的,如果不用它,for循环使用命令行的位置参数。
例如,顺序输出当前列表中的数字:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
输出结果:
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
顺序输出字符串中的字符:
#!/bin/bash for str in This is a string do echo $str done
输出结果:
This is a string
while循环用于不断执行一系列命令,也用于从输入文件中读取数据。其语法格式为:
while condition do command done
以下是一个基本的 while 循环,测试条件是:如果 int 小于等于 5,那么条件返回真。int 从 1 开始,每次循环处理时,int 加 1。运行上述脚本,返回数字 1 à 5,然后终止。
#!/bin/bash int=1 while(( $int<=5 )) do echo $int let "int++" done
运行脚本,输出:
1 2 3 4 5
以上示例使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:Bash let 命令
。
while循环可用于读取键盘信息。下面的实例中,输入信息被设置为变量FILM,按<Ctrl-D> 结束循环。
echo '按下 <CTRL-D> 退出' echo -n '输入你最喜欢的网站名: ' while read FILM do echo "是的!$FILM 是一个好网站" done
运行脚本,输出类似下面:
按下 <CTRL-D> 退出 输入你最喜欢的网站名:基础教程网 是的!基础教程网是一个好网站
语法格式:无限循环
while : do command done
ou}}
while true do command done
ou}}
for (( ; ; ))
La boucle until exécute une série de commandes jusqu'à ce que la condition devienne vraie.
La boucle until fonctionne de manière opposée à la boucle while.
Généralement, la boucle while est préférable à la boucle until, mais dans certains cas, la boucle until peut être plus utile.
Le format syntaxique de until :
until condition do command done
La condition est généralement une expression conditionnelle. Si le retour est faux, les instructions du corps de la boucle sont exécutées à nouveau. Sinon, la boucle est terminée.
Dans l'exemple suivant, nous utilisons la commande until pour afficher 0 ~ 9 du nombre :
#!/bin/bash a=0 until [ ! $a -lt 10 ] do echo $a a=`expr $a + 1` done
Résultat de l'exécution :
Le résultat de la sortie est :
0 1 2 3 4 5 6 7 8 9
case ... esac C'est une instruction de choix multiple, similaire aux instructions switch ... case d'autres langages. C'est une structure de choix multi-branches. Chaque branche de case commence par une parenthèse droite, et est terminée par deux points-virgules ;; pour indiquer la fin de l'exécution et sortir de l'instruction case ... esac. La fin de l'instruction est marquée par esac (c'est-à-dire le contraire de case).
On peut utiliser l'instruction case pour correspondre à une valeur avec un modèle. Si une correspondance réussit, la commande correspondante est exécutée.
case ... esac Le format syntaxique est le suivant :
case \ mode1) command1 command2 ... commandN ;; mode2) command1 command2 ... commandN ;; esac
La manière de fonctionner est similaire à celle montrée ci-dessus, la valeur doit toujours suivre le mot-clé in
La valeur sera vérifiée pour chaque modèle. Une fois un modèle correspondant trouvé, les commandes associées à ce modèle sont exécutées et le processus ne continue pas avec d'autres modèles. Si aucun modèle ne correspond, l'astérisque (*) est utilisé. Chaque modèle doit se terminer par un parenthèse droite. La valeur peut être une variable ou une constante. Une fois qu'une correspondance est trouvée, toutes les commandes entre cette valeur et ;; sont exécutées. * Capturez cette valeur puis exécutez la commande suivante.
Le script suivant invite à saisir 1 à 4et chaque modèle :
echo 'Saisissez' 1 à 4 entre : echo 'Vous avez saisi le nombre :' 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 rien saisi' 1 à 4 les nombres entre : ;; esac
Les résultats varient en fonction du contenu entré, par exemple :
Entrer 1 à 4 entre les nombres: Le nombre que vous avez saisi est : 3 Vous avez choisi : 3
Le script suivant correspond à une chaîne de caractères :
#!/bin/sh site=\3codebox" case \ "w3codebox") echo "基础教程网" ;; "google") echo "Google 搜索" ;; "taobao") echo "淘宝网" ;; esac
Le résultat de la sortie est :
Tutoriel de base du site web
Dans le processus de boucle, parfois, il est nécessaire de sortir de la boucle force avant d'atteindre la condition de fin de boucle, Shell utilise deux commandes pour réaliser cette fonction : break et continue.
La commande break permet de sauter toutes les boucles (arrêter l'exécution de toutes les boucles suivantes).
Dans cet exemple, le script entre dans une boucle infinie jusqu'à ce que l'utilisateur entre un nombre supérieur à5. Pour sortir de ce boucle, retourner à l'invite de shell, il faut utiliser la commande break.
#!/bin/bash while : do echo -n "Entrer 1 à 5 entre les nombres :" read aNum case $aNum in 1|2|3|4|5) echo "Le nombre que vous avez entré est $aNum!" ;; *) echo "Le nombre que vous avez entré n'est pas 1 à 5 entre les "! Fin du jeu" break ;; esac done
En exécutant le code ci-dessus, le résultat de la sortie est :
Entrer 1 à 5 entre les nombres:3 Le nombre que vous avez entré est 3! Entrer 1 à 5 entre les nombres:7 Le nombre que vous avez entré n'est pas 1 à 5 entre les "! Fin du jeu"
La commande continue est similaire à la commande break, mais avec une seule différence, elle ne quitte pas tous les boucles, mais seulement la boucle actuelle.
Modifier l'exemple ci-dessus :
#!/bin/bash while : do echo -n "Entrer 1 à 5 entre les nombres: " read aNum case $aNum in 1|2|3|4|5) echo "Le nombre que vous avez entré est $aNum!" ;; *) echo "Le nombre que vous avez entré n'est pas 1 à 5 entre les "!" continue echo "Fin du jeu" ;; esac done
En exécutant le code, on découvre que lorsque l'entrée est supérieure à5si, le boucle dans cet exemple ne se termine pas, la phraseecho "Fin du jeu"Ne sera jamais exécuté.