美文网首页Linux
Shell 运算符

Shell 运算符

作者: 谢小帅 | 来源:发表于2017-05-03 23:06 被阅读41次

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,如 awk 和 expr,expr 最常用。

    算术运算符

    将传给脚本的参数求和

    #!/bin/bash
    
    mysum=0
    for i in $@; do
        mysum=`expr $mysum + $i`
    done
    echo "和为:$mysum"
    

    输出

    ShuaideMacBook-Pro:Desktop shuai$ ./add.sh 1 2 3
    和为:6
    

    所有运算符

    #!/bin/bash
    
    a=10
    b=20
    
    val=`expr $a + $b`
    echo "a + b : $val"
    
    val=`expr $a - $b`
    echo "a - b : $val"
    
    val=`expr $a \* $b` # 转义乘法字符
    echo "a * b : $val"
    
    val=`expr $b / $a`
    echo "b / a : $val"
    
    val=`expr $b % $a`
    echo "b % a : $val"
    
    if [ $a == $b ]; then # 注意空格位置
       echo "a 等于 b"
    fi
    
    if [ $a != $b ]; then
       echo "a 不等于 b"
    fi
    

    输出

    ShuaideMacBook-Pro:Desktop shuai$ ./add.sh
    a + b : 30
    a - b : -10
    a * b : 200
    b / a : 2
    b % a : 0
    a 不等于 b
    

    关系运算符

    关系运算符 只支持数字,不支持字符串(除非字符串的值是数字)

    运算符 说明
    -eq 左边 = 右边返回 true
    -ne 左边 != 右边返回 true
    -gt 左边 > 右边返回 true
    -lt 左边 < 右边返回 true
    -ge 左边 >= 右边返回 true
    -le 左边 <= 右边返回 true

    布尔运算符

    运算符 说明
    ! 非运算
    -o 或运算(or)
    -a 与运算(and)
    #!/bin/bash
    
    a=10
    b=20
    
    if [ $a != $b ]; then # 逻辑非
        echo "$a != $b : 返回 true"
    else
        echo "$a != $b: 返回 false"
    fi
    
    if [ $a -lt 100 -a $b -gt 15 ]; then # 逻辑与
        echo "$a -lt 100 -a $b -gt 15 : 返回 true"
    else
        echo "$a -lt 100 -a $b -gt 15 : 返回 false"
    fi
    
    if [ $a -lt 100 -o $b -gt 100 ]; then # 逻辑或
        echo "$a -lt 100 -o $b -gt 100 : 返回 true"
    else
        echo "$a -lt 100 -o $b -gt 100 : 返回 false"
    fi
    

    输出

    ShuaideMacBook-Pro:Desktop shuai$ ./add.sh
    10 != 20 : 返回 true
    10 -lt 100 -a 20 -gt 15 : 返回 true
    10 -lt 100 -o 20 -gt 100 : 返回 true
    

    逻辑运算符

    运算符 说明
    && 逻辑的 AND
    ll 逻辑的 OR

    字符串运算符

    运算符 说明
    = 两个字符串相等返回 true
    != 两个字符串不相等返回 true
    -z 字符串长度为0返回 true
    -n 字符串长度不为0返回 true
    str 字符串不为空返回 true
    #!/bin/bash
    
    a="abc"
    b="efg"
    
    if [ $a = $b ]; then
       echo "$a = $b : a 等于 b"
    else
       echo "$a = $b: a 不等于 b"
    fi
    
    if [ $a != $b ]; then
       echo "$a != $b : a 不等于 b"
    else
       echo "$a != $b: a 等于 b"
    fi
    
    if [ -z $a ]; then
       echo "-z $a : 字符串长度为 0"
    else
       echo "-z $a : 字符串长度不为 0"
    fi
    
    if [ -n $a ]; then
       echo "-n $a : 字符串长度不为 0"
    else
       echo "-n $a : 字符串长度为 0"
    fi
    
    if [ $a ]; then # 直接用变量,而不是 str $a
       echo "$a : 字符串不为空"
    else
       echo "$a : 字符串为空"
    fi
    

    输出

    ShuaideMacBook-Pro:Desktop shuai$ ./add.sh
    abc = efg: a 不等于 b
    abc != efg : a 不等于 b
    -z abc : 字符串长度不为 0
    -n abc : 字符串长度不为 0
    abc : 字符串不为空
    

    文件运算符

    • -e 文件名:如果文件存在则为真
    • -r 文件名:如果文件存在且可读则为真
    • -w 文件名:如果文件存在且可写则为真
    • -x 文件名:如果文件存在且可执行则为真
    • -s 文件名:如果文件存在且至少有一个字符则为真
    • -d 文件名:如果文件存在且为目录则为真
    • -f 文件名:如果文件存在且为普通文件则为真
    • -c 文件名:如果文件存在且为 字符型文件 则为真
    • -b 文件名:如果文件存在且为 块特殊文件 则为真

    相关文章

      网友评论

        本文标题:Shell 运算符

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