Shell流程控制
if条件判断语句
1 | if 表达式 ; then |
表达式可以用到的逻辑运算符:
选项 | 含义 |
---|---|
-f | 判断文件是否存在eg: if [ -f filename ] |
-d | 判断目录是否存在eg: if [ -d dir ] |
-eq | 等于 应用于:整型比较 |
-ne | 不等于 应用于:整型比较 |
-lt | 小于 应用于:整型比较 |
-gt | 大于 应用于:整型比较 |
-le | 小于或等于 应用于:整型比较 |
-ge | 大于或等于 应用于:整型比较 |
-a | and。 eg: [ 表达式 -a 表达式 ] |
-o | or。eg: [ 表达式 -o 表达式 ] |
-z | 空字符串 |
如果使用 ((…)) 作为判断语句,大于和小于可以直接使用 > 和 <。
1 | a=10 |
if else 语句经常与 test 命令结合使用,如下所示:
1 | num1=$[2*3] |
for 循环
与其他编程语言类似,Shell支持for循环。这里直接给出例子:
1 | for loop in 1 2 3 4 5 |
while 语句
直接给出例子:以下是一个基本的 while 循环,测试条件是:如果 i 小于等于 5,那么条件返回真。i 从 1 开始,每次循环处理时,i 加 1。运行上述脚本,返回数字 1 到 5,然后终止。
1 |
|
以上实例使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:Bash let 命令。while循环可用于读取键盘信息。下面的例子中,给出了一个持续交互的while循环。
1 | echo '-----------------------' |
无限循环
1 | while true |
Shell的循环同样可以用关键词break和continue跳出,continue跳出当前循环,而break跳出所有循环。
until 循环
until 循环与 while 循环在处理方式上刚好相反,until 循环执行一系列命令直至条件为 true 时停止。一般 while 循环优于 until 循环,但在某些时候也只是极少数情况下,until 循环更加有用。condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。以下实例我们使用 until 命令来输出 0 ~ 9 的数字:
1 |
|
case语句
case为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。
case 取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;; 。取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用**星号 *** 捕获该值,再执行后面的命令。下面的脚本提示输入 1 到 4,与每一种模式进行匹配:
1 | echo '输入 1 到 4 之间的数字:' |