测试相关shell命令总结2——结构控制语句,命令行参数
1,shell 中单引号和双引号的区别,单引号不进行解释。双引号进行解释
1,在shell中进行数学运算,放在$和[]中
$[1+2]
有些很奇怪,在.sh文件中放在(())中貌似也能够进行数学运算。
2,表示条件判断的 if... then ...fi(中间可以嵌套任意层的elfi)
(1)if中如果是命令,那么判断依据是命令的退出状态码,如果$?=0;那么认定为真 (2)如果想要使用和其他语言类似的条件判断,需要借助于test或者[ ] test表示判断 if test condition then ... fi []表死判断 if [ condition ] then ... fi;注意中括号中每一个前后都需要有空格 A.1数值比较 n1 -eq n2, n1 -ne n2; n1 -gt n2 , n1 -lt n2; n1 -ge n2, n1 -le n2; A.2字符串比较 str1=str2, str1!=str2; str1<str2,str1>str2; -n str, -z str A.3文件比较 -d, -e, -f,-x,-w, -s file; file1 -nt file2,(file1 比file2新),file1 -ot file2(file1 比file2旧) 综上,检查对象是否非空的方式: 如果是变量,就使用 -z var 的方式 如果是文件,判断是否存在用-e,是否存在且非空使用-s
复合条件判断:[] || []或者[] &&[]
(())可以用于数值判断
#!/bin/sh var=10 if (($var<=20)) then var=$[$var+2] ((var=$var+4)) echo $var fi
[[]]可以用于包含正则表达式的字符串判断,比如 if [[$user=r*]]
3,表示分支判断的case
格式是:
case variable in
patter1|patter2) commands;;
pattern3) commands;;
*)default commands;;
esac
4,for语句控制循环
4.1 列表循环 for var in list do commands done 4.2 使用数值循环 方法一: for ((i=1;i<=10;i+=)) do commands done 方法二 for i in `seq 1 10` do commands done
5,while语句控制循环
while test或者[]表示的判断语句
do
done
6,until控制循环
和while语句相反,是判断语句不成立的时候才终止循环
7,跳出循环
break,continue,此外还有break n;continue n其中的n代表跳出几层循环
8,利用循环控制文件(循环重定向)
逐行读取文件
#!/bin/sh #利用shell 尝试循环控制文件 while read line do echo $line done<a.txt
#!/bin/sh for((i=0;i<4;i++)) do echo $i done>a.txt
#!/bin/sh IFS_OLD=$IFS IFS=$'\n' for line in `cat a.txt` do echo $line IFS=: for word in $line do echo $word done done IFS=$IFS_OLD
9,shell中的命令行参数
在shell中, $0代表脚本名称 $#代表参数个数 $1-$9代表传入的各个参数 如果超过9需要用${10}这样的形式 ${!#}代表最后一个参数,{}中不能出现$ shift可以移动参数