• shell学习-运算符


    问题表现

    在linux中想做数学计算,直接操作数据运算可以得到如下结果:
    在这里插入图片描述
    可见linx更加偏向底层操作,没有高级语言那样的解释器。

    运算符

    linux提供两种运算符用于运算操作

    $((运算式))

    • 语法:
    变量名=$((运算式))
    
    • 1
    • 举例:
    a=$((1+2))
    echo $a #结果返回为3
    
    • 1
    • 2

    $[ 运算式 ]

    • 语法:
    #注意使用$[]的方式在[]内需要空格
    变量名=$[ 表达式 ]
    
    • 1
    • 2
    • 举例:
    b=$[ 1 + 2 ]
    echo $b #结果为3
    
    • 1
    • 2

    算数运算符

    算术运算符说明举例
    +加法expr $a + $b 结果为30
    -减法expr $a - $b 结果为-10
    *乘法expr $a * $b 结果为200
    /除法expr $b / $2 结果为2
    %取余expr $b % $a 结果为0
    =赋值a=$b 把变量b的值赋值给变量a
    ==相等。判断两个数字是否相等,相等则返回true [ $a == $b ] 返回true
    !=不相等。判断两个数字是否相等,不相等则返回true [ $a != $b ] 返回true
    • 举例
    # 其实原生bash不支持简单的数学运算,但是可以通过其他命令来实现,
    # 例如: awk 和 expr命令进行处理计算之后才可以得出结果,expr 最常用。
    # expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
    
    # 以下几点需要注意:
    
    # 1.表达式和运算符之间要有空格。
    # 例如: 5+10 是不对的,必须写成 5 + 10,这与我们熟悉的大多数编程语言不一样。
    
    # 2.完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
    
    # 3.乘号(*)前边必须加反斜杠(\)进行转义才能实现乘法运算。
    
    
    #!/bin/bash
    
    a=10
    b=20
    
    result=`expr $a + $b`
    echo "a + b = $result"
    # a + b = 30
    
    result=`expr $a - $b`
    echo "a - b = $result"
    # a - b = -10
    
    result=`expr $a \* $b`
    echo "a * b = $result"
    # a * b = 200
    
    result=`expr $b / $a`
    echo " b / a = $result"
    # b / a = 2
    
    result=`expr $b % $a`
    echo "b % a = $result"
    # b % a = 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    关系运算符 / 比较运算符

    在[]中使用在(()和[[]]中使用说明举例
    -eq==equal的缩写,表相等[ $a -eq $b ] 返回 false
    -ne!=not equal的缩写,表不相等[ $a -nq $b ] 返回 true
    -gt>greater than的缩写,表大于[ $a -gt $b ] 返回 false
    -ge>=greater equal的缩写,表大于等于[ $a -ge $b ] 返回 false
    -lt<greater than的缩写,表小于[ $a -lt $b ] 返回 true
    -le<=greater equal的缩写,表小于等于[ $a -lq $b ] 返回 true
    提示:
    # 1. "<"符号意思是小于,if [[ "$a" <  "$b" ]] 是错误的,if [ "$a"  \<  "$b" ] (即在单[]中需要转义,因为shell也用 <和>表示重定向)。
    # 2. ">"符号意思是大于,同上。
    # 3. 关系运算符只支持数字(整数),不支持字符串,除非字符串的值是数字(整数)。
    # 4. 条件表达式要放在方括号之间,并且要有空格,例如 [[$a==$b]] 是错误的,必须写成 [[ $a == $b ]]。
    
    #!/bin/bash
    
    a=5
    b=10
    
    if [ $a -eq $b ];then echo "eq 关系运算结果: a等于b" ;else echo "eq 关系运算结果: a不等于b"; fi
    # eq 关系运算结果: a不等于b
    
    
    if [ $a -ne $b ];then echo "ne 关系运算结果: a不等于b";else echo "ne 关系运算结果: a等于b"; fi
    # ne 关系运算结果: a不等于b
    
    
    if [ $a -gt $b ];then echo "gt 关系运算结果: a大于b";else echo "gt 关系运算结果: a小于等于b";fi
    # gt 关系运算结果: a小于等于b
    
    
    if [ $a -lt $b ];then echo "lt 关系运算结果:a小于b";else echo "lt 关系运算结果:a大于等于b";fi
    # lt 关系运算结果:a小于b
    
    
    if [ $a -ge $b ];then echo "ge 关系运算结果:a大于等于b";else echo "ge 关系运算结果:a小于b";fi
    # ge 关系运算结果:a小于b
    
    
    if [ $a -le $b ];then echo "le 关系运算结果:a小于等于b";else  echo "le 关系运算结果:a大于b";fi
    # le 关系运算结果:a小于等于b
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    逻辑运算符

    在[ ]中使用在(()和[[]]中使用说明举例
    赋值a=10b=25
    -a&&与运算,两个表达式都为true,才返回true[ $a -lt 20 -a $b -gt 20 ] 返回true
    -o||或运算,有一个表达式都为true,则返回true[ $a -lt 20 -o $b -gt 100 ] 返回true
    !!非运算,表达式为true,则返回false[ ! false ] 返回true
    小结:逻辑操作符使用总结
    [ ]中用 -a,-o, !
    [[ ]]中用 &&,||, !
    test 用法和 [ ]相同
    
    #!/bin/bash
    
    a=5
    b=10
    
    
    if [ $a != $b ];then echo "!= 逻辑非运算结果:a不等于b";else echo "!=逻辑非运算结果: a等于b";fi
    # != 逻辑非运算结果:a不等于b
    
    if [ $a -lt 50 -a  $b -gt 8 ];then echo "and 逻辑与运算结果:真";else echo "and 逻辑与运算结果:假";fi
    # and 逻辑与运算结果:真
    
    if [ $a -lt 50 -o $b -gt 12 ];then echo "or 逻辑或运算结果:真";else echo "or 逻辑或运算结果:假";fi
    # or 逻辑或运算结果:真
    
    if [ $a -lt 3 -o $b -gt 8 ];then echo "or 逻辑或运算结果:真";else echo "or 逻辑或运算结果:假";fi
    # or 逻辑或运算结果:真
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    字符串运算符

    字符串运算符说明举例
    =检测两个字符串是否相等,相等则返回true[ $a = $b ] 返回true
    !=检测两个字符串是否相等,不相等则返回true[ $a != $b ] 返回true
    -z检测字符串长度是否为0,为0则返回true[ -z $b ] 返回true
    -n检测字符串长度是否为0,不为0则返回true[ -n $b ] 返回true
    str检测字符串是否为null,不为null则返回true[ $b ] 返回true
    #!/bin/bash
    
    a="abcde"
    
    if [[ "$a" == abc* ]]; then  echo "abc开头"; else echo "不是"; fi
    # abc开头
    
    if [ "$a" == abc* ]; then  echo "abc开头"; else echo "不是"; fi
    # 不是
    
    if [ "$a" = abc* ]; then  echo "abc开头"; else echo "不是"; fi
    # 不是
    
    if [[ "$a" = abc* ]]; then  echo "abc开头"; else echo "不是"; fi
    # abc开头
    
    b="abcde"
    if [[ "$b" = "abc*" ]]; then  echo "不相等"; else echo "不等"; fi
    # 不等
    
    if [[ "$b" == "abc*" ]]; then  echo "不相等"; else echo "不等"; fi
    # 不等
    
    if [ "$b" == "abc*" ]; then  echo "不相等"; else echo "不等"; fi
    # 不等
    
    if [ "$b" = "abc*" ]; then  echo "不相等"; else echo "不等"; fi
    # 不等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    #!/bin/bash
    
    a="cfe"
    b="efr"
    
    if [ "$a" = "$b" ]
    then 
    	echo "字符串a和字符串b相等"
    else
    	echo "字符串a和字符串b不相等"
    fi
    
    if [ "$a" == "$b" ]
    then 
    	echo "字符串a和字符串b相等"
    else
    	echo "字符串a和字符串b不相等"
    fi
    
    if [ "$a" != "$b" ]
    then
    	echo "字符串a和字符串b不相等"
    else
    	echo "字符串a和字符串b相等"
    fi
    
    if [ -z "$a" ]
    then
    	echo "字符串a的长度为0,即字符串a为空?"
    else
    	echo "字符串a的长度不为0"
    fi 
    
    if [ -n "$a" ]
    then
    	echo "字符串a的长度不为0"
    else
    	echo "字符串a的长度为0,即字符串a为空?"
    fi
    
    if [ "$a" ]
    then
    	echo "字符串a不为空"
    else
    	echo "字符串不为空"
    fi
    
    # 输出结果
    # 字符串a和字符串b不相等
    # 字符串a的长度不为0
    # 字符串a的长度不为0
    # 字符串a不为空
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    文件测试运算符

    文件测试运算符说明举例
    -b检测文件是否是块设备文件,如果是,则返回true[ -b $file ] 返回true
    -c检测文件是否是字符设备文件,如果是,则返回true[ -c $file ] 返回true
    -d检测文件是否是目录文件,如果是,则返回true[ -d $file ] 返回true
    -f检测文件是否是普通文件(既不是目录也不是设备文件),如果是,则返回true[ -f $file ] 返回true
    -g检测文件是否设置了SGID位,如果是,则返回true[ -g $file ] 返回true
    -k检测文件是否设置了粘着位(stucky Bit),如果是,则返回true[ -k $file ] 返回true
    -p检测文件是否具名管道,如果是,则返回true[ -p $file ] 返回true
    -u检测文件是否设置了SUID位,如果是,则返回true[ -u $file ] 返回true
    -r检测文件是否可读,如果是,则返回true[ -r $file ] 返回true
    -w检测文件是否可写,如果是,则返回true[ -w $file ] 返回true
    -x检测文件是否可执行,如果是,则返回true[ -x $file ] 返回true
    -s检测文件是否为不为空(文件大小是否不为0),如果不为0,则返回true[ -s $file ] 返回true
    -e检测文件(包括目录)是否存在,如果存在,则返回true[ -e $file ] 返回true
    -a检测文件(包括目录)是否存在,如果存在,则返回true[ -e $file ] 返回true
  • 相关阅读:
    TDengine 入门教程④——权限管理 | 用户增删改查,授权与撤销授权
    TODOLIST
    『期末复习』微处理器发展历程与微型计算机结构
    QT编程:QT int和float转QString
    Java Properties的null值
    0基础学习VR全景平台篇 第104篇:720全景后期软件安装
    [蓝桥杯 2022 省 B] 刷题统计
    nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
    Linux——vi编辑器
    10-bean创建流程1一finishBeanFactoryInitialization(ConfigurableListableBeanFactory
  • 原文地址:https://blog.csdn.net/i_mycode/article/details/125883578