测试相关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
if 相关判断条件

 复合条件判断:[] || []或者[] &&[]

(())可以用于数值判断  

 #!/bin/sh
var=10
if (($var<=20))
    then    
        var=$[$var+2]
        ((var=$var+4))
        echo $var
 fi
双尖括号进行if数值比较

[[]]可以用于包含正则表达式的字符串判断,比如 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
shell下的for循环

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=$'
'
for line in `cat a.txt`
    do
        echo $line
        IFS=:   
        for word in $line
            do      
                echo $word
            done    
    done    
IFS=$IFS_OLD
         
列表循环更改分隔符IFS

 9,shell中的命令行参数

在shell中,
$0代表脚本名称
$#代表参数个数
$1-$9代表传入的各个参数
如果超过9需要用${10}这样的形式
${!#}代表最后一个参数,{}中不能出现$
shift可以移动参数
shell脚本内置参数
原文地址:https://www.cnblogs.com/bobodeboke/p/3741199.html