linux的shell中有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),它们对我们平时的脚本编写和命令输入都有很大的作用,掌握了这些一定会对我们有很大的帮助。
一.if
if是一个条件判断语句,它的语句结构如下
if [ condition ];then # 中括号内的是条件测试语句,表示如果条件为真,则执行then后面的内容
action #条件为真时需要执行的动作
elif [ condition ];then #执行完上一条的动作后,继续判断elif后的条件,若真则执行下一条动作
action #elif条件为真的时候执行的动作
else #若elif后的条件为假时(可以没有,并且继续一个新的elif判断)
action #若elif后的条件为假时,执行的动作
else #若if的条件为假的时候
action #if的条件为假时候,执行的动作
fi #判断结束
注意:(条件测试语句结束后的]后面应该加上分号,当然也可以不加,不加的话then就要写到下一行,个人比较喜欢写到一行,这样显得比较整齐规范)
下面是一个用if判断用户输入的年份是否为闰年的脚本例子
再来看一个if判断成绩的脚本例子
二.for
for 是一个循环结构,它的基本结构如下:
for 变量 in seq字符串 #循环的字符串
do #循环开始
action #循环的内容
done #循环结束
注意:(循环的字符串可以有两种表述方式,一种是类似C语言的表示方法,但是要加双层的小括号,如((i=0;i<=100;i++)),表示的自然就是i每次加1,直到大于100后就终止循环,另外一种就是变量加in加变量的数组,如 i in `ls`表示的就是将ls命令所列出的变量一次赋予i)
下面我们来看一个for循环计算1..100的数字的和的脚本
再将这个问题用另一种for循环的写法写出来
三.while循环
while也是一种循环体,它的基本结构如下:
while [condition] #循环的条件
do #循环开始的标志
action #循环的动作
done #循环结束的标志
下面来看一个用while循环实现的10到1的倒计时
最后,举上几个将for,while,if结合使用的例子
1.让用户猜一个1-66之间的数字,如果不对,就提示用户太大还是太小,直到用户输对为30
我们来看看这段脚本的具体的编写思想,首先让用户输入一个数字,这里用到了read命令,read命令是让用户输入一个参数,可以使用-p选项,提示用户输入的内容,如 read -p "please input a count(0-66):" count ,这样写也是可以的,然后用到了while循环,当用户输入的数字符合while后面的条件即用户输入的数字是30的时候,就终止循环,并输出恭喜,你对了,否则就进行do后面的内容,首先if判断参数是否大于30,如果是就提示输出数字太大,并且让用户重新输入,否则就判断参数是否小于30,如果是就提示用户数字太小哦啊,并让用户重新输入,然后fi结束if语句,再加上done表示while循环结束。
2.一次性添加多个用户的脚本
首先第一行的seq表示前面的变量number会在1到$1之间循环,$1是用户在执行脚本的时候手动输入的需要具体添加多少个用户的一个位置变量,然后do开始执行循环体,使用id 这条命令判断user$number中的用户是否有的已经存在,若存在,则提示用户,否则就执行添加用户的命令,然后done结束
3.提示用户输入一个数字n,并且计算1到n和与乘机后输出到终端上
首先定义两个变量sum1,sum2分别表示加的和与乘积的和,然后提示用户输入一个想要计算的和的范围,即数字,接着判断,数字是否小于1 ,如果小于1就提示用户太小了,在输入更大的一个数字,如果大于1 ,就执行else后面的for循环的内容,即计算出1到n的所有数字的相加的和与相乘的和,最后fi,if循环结束,输出相加的和的数字和相乘的和的数字。