在shell脚本中进行条件控制以及使用循环
if条件语句语法:
if [ 条件表达式 ]
then
代码
else
代码
fi
注意:在上面的if条件语句中,if和 [ 之间要有空格,而条件表达式和两边的 [ ] 都要有空格,条件表达式不能紧挨着 [ 和 ]。
if条件表达式以fi结束。
Eg.
结果出现了以下问题:
原因是因为开头在#!后还要有一个/,加上/后解释器错误没有了,代码如下:
可是仍然有没有那个文件或目录的错误。对于这个错误我觉得是echo后的表达式有问题,于是注销了表达式,改输出small和bigger,结果程序运行正确,输出了small或者bigger。
所以对于echo后的表达式,我把表达式加上双引号,结果运行成功,没有问题了。
利用case表达式进行条件判断:
case 变量 in
str1)
命令串;;
str2)
命令串;;
*)
Eg.
刚才之所以出错,是因为代码没有正确结尾,case条件语句在shell中应该以esca结尾。
又出现错误如下:
原因:
*后面的)为中文符号,将它改为英文符号,并且case条件语句的结束应该为esca而不是easc,修正后如下:
就正确了,正确结果如下:
在shell脚本中使用for循环
shell中可以使用三种循环:
A、for循环
第一种语法形式:
for var in list
do
命令串
done
注意上面的list的形式可以使用空格分隔的$1 $2 $3,或者空格分隔的值1 2 3。
第二种语法形式:
for var
do
命令串
done
在这种形式中,list被省略了,那么这时list就是指命令行参数,每次循环的var都是一个命令行参数。
eg.输出命令行参数的和
注意上面shell程序中echo命令的参数 -e是为了让\c 和\b生效,其中\c是表示输出加数后不换行,\b是退格的意思删除多余的+号。
运行脚本后出现错误:
原因:
expr不能喝test指令的-gt婚后在一起用,要不然将expr改为test,要不然将-gt改为>=
,值得注意的是>=前面要使用\。
仍然出错为:
原因为:
sum求和时,等号两端不能有空格。
改为:
运行后结果为:
B、while循环
语法格式:
while 条件表达式
do
命令行串;
done
eg.输出命令行每个参数
shift命令将命令行参数左移,是原来处于第二位的参数变成第一位然后输出。
结果为:
注意while循环的条件表达式也要用空格将条件表达式与 [ 和 ]分隔开来。
如果要在while中使用另一个变量n,要用 -n 的形式来表示在循环体中使用的一元表达式:
当然如果while中不添加-n也有一样的结果:
C、until循环
语法格式如下:
until 条件表达式
do
命令串;
done