• 测试相关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脚本内置参数
  • 相关阅读:
    tcp粘包解决
    socket网络编程
    logging模块
    异常处理
    hashlib configparser模块
    列表推导式和生成器表达式和内置函数
    迭代器与生成器
    装饰器
    函数
    文件操作
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3741199.html
Copyright © 2020-2023  润新知