测试相关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=$'\n'

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脚本内置参数

 

你可能感兴趣的:(shell命令)