您的位置:首页 > 运维架构 > Shell

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

2022-05-26 11:30 1961 查看

[toc]

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)方式二

使用

expr
let
数值运算工具,不推荐。

要想进行数值运算的第二种方法是使用

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编程的部分说明)

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: