美文网首页
运算符相关话题

运算符相关话题

作者: rochestor | 来源:发表于2017-10-15 14:11 被阅读9次

    运算符

    赋值运算符

    =
    # "=" 即可以用作赋值,也可以用作测试
    # "="左右不允许有空格
    var=27
    category=minerals  
    
    
    #   =   作为测试操作符
    
    if [ "$string1" = "$string2" ]
    then
       command
    fi
    
    #  [ "X$string1" = "X$string2" ] 这样写是安全的,
    #  这样写可以避免任意一个变量为空时的报错。
    #  (变量前加的"X"字符规避了变量为空的情况)
    
    

    算术运算符

    ** 幂运算
    let a=5**3
    echo $a  # 125
    
    +=
    #自增常用的几种写法
    a=1
    let "a=$a+1"
    (( a++ ))
    (( a = $a + 1 ))
    n=$[ $n + 1 ]  # 整数扩展符。在 $[ ] 中可以计算整数的算术表达式
    let "a++"
    
    注意:注意,Bash并不支持浮点运算,Bash会将带小数点的数看做字符串
    a=1.5
    
    let "b = $a + 1.3"  # 报错
    # t2.sh: let: b = 1.5 + 1.3: syntax error in expression
    #                            (error token is ".5 + 1.3")
    
    # 如果你想在脚本中使用浮点数运算,借助bc 或外部数学函数库
    

    位运算

    位运算很少出现在shell脚本中

    逻辑(布尔)运算符

    ! 非(NOT)
    fi
    
    && 逻辑与(AND)
    if [ $condition1 ] && [ $condition2 ]
    #  等同于:  if [ $condition1 -a $condition2 ]
    #  返回true如果 condition1 和 condition2 同时为真...
    
    if [[ $condition1 && $condition2 ]]    # 可行
    #  注意,&& 运算符不能用在[ ... ]结构里。
    

    数字常量

    shell脚本会把数字以十进制整数看待(base 10),除非数字加了特殊的前缀或标记。 带前缀0的数字是八进制数(base 8);带前缀0x的数字是十六进制数(base 16)。 内嵌 # 的数字会以 BASE#NUMBER 的方式进行求值(不能超出当前shell支持整数的范围)

    # 十进制数: 默认
    let "dec = 32"
    echo "decimal number = $dec"             # 32
    # 一切正常。
    
    
    # 八进制数: 带前导'0'的数
    let "oct = 032"
    echo "octal number = $oct"               # 26
    # 结果以 十进制 打印输出了。
    # ------ ------ -----------
    
    
    # 十六进制数: 带前导'0x'或'0X'的数
    let "hex = 0x32"
    echo "hexadecimal number = $hex"         # 50
    
    echo $((0x9abc))                         # 39612
    #     ^^      ^^   双圆括号进行表达式求值
    # 结果以十进制打印输出。
    
    
    # 其他进制数: BASE#NUMBER
    # BASE 范围:  2 - 64
    # NUMBER 必须以 BASE 规定的正确形式书写,如下:
    
    let "bin = 2#111100111001101"
    echo "binary number = $bin"              # 31181
    
    let "b32 = 32#77"
    echo "base-32 number = $b32"             # 231
    
    let "b64 = 64#@_"
    echo "base-64 number = $b64"             # 4031
    
    # 这种表示法只对进制范围(2 - 64)内的 ASCII 字符有效。
    # 10 数字 + 26 小写字母 + 26 大写字母 + @ + _
    

    双圆括号结构

    (( a = 23 ))  #  C风格的变量赋值,注意"="等号前后都有空格
    
    echo "a (initial value) = $a"   # 23
    
    (( a++ ))     #  后缀自增'a',C-style.
    echo "a (after a++) = $a"       # 24
    
    (( a-- ))     #  后缀自减'a', C-style.
    echo "a (after a--) = $a"       # 23
    
    
    (( ++a ))     #  前缀自增'a', C-style.
    echo "a (after ++a) = $a"       # 24
    
    (( --a ))     #  前缀自减'a', C-style.
    echo "a (after --a) = $a"       # 23
    
    
    ########################################################
    #  注意,C风格的++,--运算符,前缀形式与后缀形式有不同的
    #+ 副作用。
    
    n=1; let --n && echo "True" || echo "False"  # False
    n=1; let n-- && echo "True" || echo "False"  # True
    
    #  感谢 Jeroen Domburg。
    ########################################################
    
    
    
    (( t = a<45?7:11 ))   # C风格三目运算符。
    #       ^  ^ ^
    echo "If a < 45, then t = 7, else t = 11."  # a = 23
    echo "t = $t "                              # t = 7
    
    

    唯有爱与技术不可辜负

    相关文章

      网友评论

          本文标题:运算符相关话题

          本文链接:https://www.haomeiwen.com/subject/uxccuxtx.html