• 『忘了再学』Shell基础 — 20、Shell中的运算符


    1、Shell常用运算符

    Shell中常用运算符如下表:

    优先级数值越大优先级越高,具有较高优先级级别的运算符先于较低级别的运算符进行求值运算。

    优先级 运算符 说明
    13 -,+ 单目负、单目正
    12 !,~ 逻辑非、按位取反或补码
    11 *,/,% 乘、除、取模
    10 +,- 加、减
    9 <<,>> 按位左移、按位右移
    8 <=,>=,<,> 小于或等于、大于或等于、小于、大于
    7 ==,!= 等于、不等于
    6 & 按位与
    5 ^ 按位异或
    4 ` `
    3 && 逻辑与
    2 `
    1 =,+=,-=,/=
    `%=,&=,^=,
    =
    <<=,>>=`

    简单示例:

    # 例1:加减乘除
    # 虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级。
    [root@Lyl ~]# num=$(( (10+8)*6/2 ))
    [root@Lyl ~]# echo $num
    54
    
    # 例2:取模运算
    [root@Lyl ~]# num=$(( 19%5 ))
    [root@Lyl ~]# echo $num
    4
    
    # 例3:逻辑与
    # 逻辑与运算只有相与的两边都是1,与的结果才是1,否则与的结果是0
    [root@Lyl ~]# value=$(( 1&&0 ))
    [root@Lyl ~]# echo $value
    0
    
    

    2、Shell中数值运算的方法

    在Shell中所有变量的默认类型是字符串型,那如果我需要进行数值运算,可以采用以下三种方法中的任意一种:

    (1)方式一

    就是使用declare命令,把一个变量声明成数值类型。

    # 给变量aa和bb赋值
    [root@Lyl tmp]# aa=11
    [root@Lyl tmp]# bb=22
    
    # 声明变量cc的类型是整数型,它的值是aa和bb的和。
    # 这里注意一下,其实应该把变量aa和bb也通过declare命令声明成数值型,
    # 但是Shell这点还好,只把最后的和cc声明成数值型,也是能进行计算的。
    [root@Lyl tmp]# declare -i cc=$aa+$bb
    
    # 输出变量cc
    [root@Lyl tmp]# echo $cc
    33
    

    该种方式并不太建议使用,编写有些麻烦。虽然系统最终换算的方式还是用declare命令,但还是不推荐。

    (2)方式二

    使用exprlet数值运算工具,不推荐。

    要想进行数值运算的第二种方法是使用expr命令,这种命令就没有declare命令复杂了。

    expr运算工具示例如下:

    # 给变量aa和bb赋值
    [root@Lyl ~]# aa=11
    [root@Lyl ~]# bb=22
    
    # aa和bb的求和。
    # 注意“+”号左右两侧必须有空格。
    [root@Lyl ~]# cc=$(expr $aa + $bb)
    
    # 说明一下
    # 我们之前说过$( )中调用的是系统命令,
    # 换句话说$( )中`expr $aa + $bb `是一条运算命令。
    
    # 输出cc变量的值
    [root@Lyl ~]# echo $cc
    33
    
    
    # 使用expr命令进行运算时,要注意元算符号左右两侧必须有空格,
    # 否则会报错,元算不能被执行。
    [root@Lyl ~]# cc=$(expr $aa +$bb)
    expr: 语法错误
    
    

    let命令和expr命令基本类似,都是Linux中的运算命令。

    let元算工具示例如下:

    # 示例1
    # 给变量aa和bb赋值
    [root@Lyl ~]# aa=11
    [root@Lyl ~]# bb=22
    
    # aa和bb的求和。
    [root@Lyl ~]# let cc=$aa+$bb
    [root@Lyl ~]# echo $cc
    33
    
    
    # 示例2
    # 定义变量n
    [root@Lyl ~]# n=10
    
    # 变量n的值等于变量本身再加1
    [root@Lyl ~]# let n+=1
    [root@Lyl ~]# echo $n
    11
    
    

    总结:

    expr命令和let命令大家可以按照习惯使用,不过let命令对格式要求要比expr命令宽松,所以推荐使用let命令进行数值运算。

    (3)方式三(推荐)

    使用$((运算符))或者$[运算符]的方式进行运算。(两种都可以)

    # 给变量aa和bb赋值
    [root@Lyl tmp]# aa=11
    [root@Lyl tmp]# bb=22
    
    # 求和
    [root@Lyl ~]# cc=$(( $aa+$bb))
    [root@Lyl ~]# echo $cc
    33
    
    

    总结:

    $( )中存放的是系统命令,$(( ))中是进行数学运算的。

    $[ ]不推荐使用,因为[ ]在Shell中有极其特殊且重要的作用,就是测试。(之后Shell编程的部分说明)

    这三种数值运算方式,大家可以按照自己的习惯来进行使用,推荐使用方式三。

  • 相关阅读:
    软件设计模式系列之十四——代理模式
    Sigrity仿真之电热混合仿真
    【华为OD机试python】数字涂色【2023 B卷|100分】
    完整安装datax-web教程
    跨模态检索论文阅读:(ViLT)Vision-and-Language Transformer Without Convolution or Region Supervision
    暂定名「码道功成:Coder启示录」
    检查原生 JavaScript 函数是否被覆盖
    Spark Monte Carlo
    【已解决】PPT不能转换成PDF文档怎么办?
    网络编程——python
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16312895.html