shell脚本与我们所用的c语言控制语句,是存在一些差异的,因此,我们需要重新认识并且学会它们。因此,接下来,我会介绍常用的流程控制语句 。如:if for 、while、 case 、 until等等
一、if条件判断语句
if条件判断语句,分为三类,一类单分支if、一类双分支if、最后一类多分支if
1.1、单分支if
if [ 条件1 ];then // 中括号里的两边必须空格, 当then与中括号同一行,必须用;分号隔开
执行第一段程序
fi
另外一种写法(then与中括号不是同一行)
if [ 条件1 ]
then
执行第一段程序
fi
简单的打分功能例子:当a的分数大于 60分时,输出 已及格
注意: if也需要与中括号空一格 如 if 【 】
输出结果
1.2、双分支if
if [ 条件1 ]
then
条件成立时,执行这段程序
else
条件不成立时,执行这段程序
fi
简单的打分功能例子:当a的分数大于 60分时,输出 已及格 否则 不及格
注意:在shell1脚本,不建议用 > >= < <= 而需要用 shell专属的 -gt -eq -lt -le 等
否则容易运行出错误。
输出结果:
1.3、多分支if
if [ 条件1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件2 ]
then
当条件判断式2成立时,执行程序2
。。。。。。。。。
else
当所有条件都不成立时,执行此程序
fi
例子:当a的成绩【60,70)--及格,【70,80)--B 【80,90)--A 【90,99)--A+ 低于60 —不及格
注意:不可用 && ,因为我一开始就是用&& ,报错了,改为用 -a 就成功
输出结果
二、case控制语句
case $变量名称 in
“第一个变量内容”)
程序段一 #不用加;分号
;; # ;; 相当于break;
“第二个变量内容”)
程序段二
;;
*)
其它程序段
;;
esac
对比c语言switch控制语句
例子:当a的成绩【60,70)--及格,【70,80)--C 【80,90)--B 【90,99)--A 低于60 —不及格
输出结果
三、for循环语句
shell的 for循环存在两种形式
3.1、第一种for形式
与第二种相比,在shell脚本中使用较少,第二种较多
for ((初始值;循环控制条件;变量变化)) #两个括号
do
程序 #不用加分号;结尾
done
与c语言的for循环语句不同点
简单例子:1~100的相加运算
输出结果
3.2、第二种for形式
for var in con1 con2 con3 ...
do
程序段
done
第一次循环时,$var 的内容为 con1
第二次循环时,$var 的内容为 con2
第三次循环时,$var 的内容为 con3
......
例子:求无顺序加法运算:1 + 3 + 5 + 9 + 15 + 455 = 488
分析:第一次循环,num=1 ,第二次循环 num=3 第三次循环 num=5 直到num=455 停止
输出结果
例子2:使用shell脚本,测试当前位置下,即 ls 下文件 是目录,还是普通文件
分析: `ls`,此功能,获取当前位置的文件信息,接着按顺序从第一个文件开始到最后一个文件
依次传给name 判断相应文件的属性
输出结果
四、while控制语句
while [ condition ] #有三处需要 空格
do
程序段
done
例子:
当输入 num=5 ,时,执行无限循环打印hello world
五、unitl 控制语句
until [ condition ]
do
程序段
done
例子:
结果输入num=5
分析:当满足条件时,不会执行do ---done 里面的内容,与while相反
六、break 与 continue
6.1、break
break 命令允许跳出循环。
break 通常在进行一些处理后退出循环或 case 语句
例子:当i = 3时,退出for循环
输出结果
6.2、continue
continue 命令类似于 break 命令
只有一点重要差别,它不会跳出循环,只是跳过这次循环步骤,接着运行下一次循环
例子:当i=3时,跳过此次循环,进行下一次循环
输出结果