从这一节主要学习 控制语句、循环语句
注释、shell多行注释
shell单行注释很简单,只需在每行行首增加#,但是他其实是没有提供专门的多行注释的方法的,所以我们采用投巧的方式来多行注释,用EOF分界符来多行注释,如下:
1 #! /bin/sh 2 3 file="/Desktop/file.test" 4 5 <<EOF 6 if [ -r $file ] 7 then 8 echo "1" 9 fi 10 11 if [ -w $file ] 12 then 13 echo "3" 14 else 15 echo "4" 16 fi 17 EOF 18 19 if [ -f $file ] 20 then 21 echo "file is an ordinary file" 22 fi
上面代码中5 - 17行就被注释掉了。
if判断语句
if判断语句应该已经很熟悉了,前面很多例子都使用了if判断语句,这里直接上俩个程序,并提供运行结果。
1 #! /bin/sh 2 3 var="test" 4 5 if [ $var == test1 ] 6 then 7 echo "1" 8 else if [ $var == test ] 9 then 10 echo "2" 11 fi 12 fi
运行结果:2
上面使用的结构是
if ...
then ...
else if ...
then ...
fi
fi
另外一种结构是:
1 #! /bin/sh 2 3 var="test" 4 5 if [ $var == test1 ] 6 then 7 echo "1" 8 elif [ $var == test ] 9 then 10 echo "2" 11 fi
运行结果也是2,这个结构和上面的类似,只是中间的else if ... fi 被换为elif了。
循环语句
for循环
先看一个例子:
1 #! /bin/sh 2 3 for (( i=0; i<10; i++)) 4 do echo $i 5 done
乍看起来还是很熟悉的,但是实际上需要注意如下几点:
1,for循环要用双括号 括起来,即: ((...;...;...;))
2,do 和 done是必不可少的
输出结果就是从0到9所有数字
while循环
1 #! /bin/sh 2 3 i=0 4 while((i<10)) 5 do 6 echo $i 7 let i++ 8 done
该循环的作用与上面的for循环结果输出一样。
while循环的结构是:
while ...
do ...
done
until循环
until循环使用很少,结构类似c/c++ java的do while循环,但实际条件是终止条件 而非c/c++里面的执行条件。这里略做介绍,个人建议浏览即可,也可跳过。
结构:
until ...
do ...
done
1 #! /bin/sh 2 3 i=0 4 until((i>=10)) 5 do 6 echo $i 7 let i++ 8 done
上面循环执行结果与之前的相同,请注意这里until里面的条件是退出条件。
数组
看for in 和 case 语句前,先了解一下shell数组
表示方式:
方式一:arraynum=(1 2 3 4 5)
方式二:
arraynum[0]=0
arraynum[1]=1
arraynum[2]=2
获取数组的长度的方式:${#arraynum[@]} (arraynum[@]实际上arraynum的列表,计数符号我们在前面讲过,所以这个表达式不难理解)
for in 语句
接着我们来看如何遍历输出数组
1 #! /bin/sh 2 3 arraynum[0]=a 4 arraynum[1]=b 5 arraynum[2]=c 6 7 for var in ${arraynum[@]} 8 do 9 echo ${var} 10 done 11 12 echo ${#arraynum[@]} 13 echo ${arraynum[@]}
上面就使用了for in语句遍历输出数组内容,最后俩句是为了验证上面我所说的,${#arraynum[@]}是计算数组的长度,${arraynum[@]}是数组列表。
我们来看看输出结果:
for in语句的结构如下:
for 变量名 in 列表
do ...
done
该表达式语句比较常用,我们需要熟记他的形式和用法。