Shell 学习笔记(三)状态码 条件判断 算术操作

 1、!

       逻辑 "非"操作符

       反转命令或条件测试的结果, 并且这会影响退出状态码.

       ! echo "a"  #!后面需要空格, $?则为1

      

       bash历史命令机制

       !<历史命令头几个字符>     #则打印命令,执行命令,注意无空格,且此机制在脚本执行中被禁用

 

2、广泛的if

       "if COMMAND"结构将会返回COMMAND的退出状态码

       #比较文件

       if cmp a b &> /dev/null  # 禁止输出.
          then echo "Files a and b are identical."
          else echo "Files a and b differ."
       fi
  
       #非常有用的"if-grep"结构:
       if grep -q Bash file
          then echo "File contains at least one occurrence of Bash."
       fi

       #if测试条件可以嵌套

       if echo "Next *if* is part of the comparison for the first *if*."

             if [[ $comparison = "integer" ]]       #上一行if的复杂测试条件
               then (( a < b ))         #数字比较        
               else  [[ $a < $b ]]     #字符串字符序比较
             fi

       then
            echo '$a is less than $b'
       fi

      

       #if [ ] 测试

       if [ xyz ]    # 字符串、任意数字均为真,未声明变量为假,注意要有空格,否则报错


3、test [ ]  [[ ]]  (( ))

       if test -z "$1"         ==  if [ -z "$1" ]
       使用[[ ... ]]条件判断结构, 而不是[ ... ], 能够防止脚本中的许多逻辑错误. 比如, &&, ||, <, 和> 操作符能够正常存在于[[ ]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错

 

       []条件判断也不一定非得要if不可, 也可以使用列表结构. e.g.  [ "$var1" -ne "$var2" ] && echo "$var1 is not equal to $var2"
      

       (( )): 扩展并计算一个算术(整数)表达式的值. 如果表达式的结果为0, 那么返回的退出状态码为1, 或者是"false". 而一个非零值的表达式所返回的退出状态码将为0, 或者是"true"

 

4、文件测试符

       -e : 文件存在

       -f  : 存在且不为目录和设备文件

       -d : 目录存在

       -s :  文件大小不为零

       -r -w -x  :  文件是否具有可读、写、执行权限

       f1 -nt f2 :  文件f1比文件f2

       f1 -ot f2 :  文件 f1比文件 f2

 

5、字符串测试符

      [ $a == z* ]        # 如果$a以"z"开头(模式匹配)那么结果将为真
      [ "$a" == "z*" ]  # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真.

     

      <小于,依照ASCII字符排列顺序        >  与此相同

                if [[ "$a" < "$b" ]]

         if [ "$a" \< "$b" ]             #注意"<"字符在[ ] 结构里需要转义

              

       -z  : 字符串为"null",即是指字符串长度为零。        -n  : 字符串不为"null",即长度不为零.

 

6、算术操作符

       ** 求幂

       算术操作符经常会出现在 exprlet表达式中.

       let “a=5**3”

       expr 5%3

 

7、数字表示

       8进制: 以 0 开头

       16进制: 以'0x'或者'0X'开头的数字

       其他进制: BASE#NUMBER, BASE的范围在2到64之间,NUMBER受限于ASCII字符范围(2 - 64):10个数字 + 26个小写字母 + 26个大写字符 + @ + _
       e.g.  let "b64 = 64#@_"      # 4031
       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值