2

『忘了再学』Shell基础 — 20、Shell中的运算符 - 繁华似锦Fighting

 1 year ago
source link: https://www.cnblogs.com/liuyuelinfighting/p/16312895.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1、Shell常用运算符

Shell中常用运算符如下表:

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

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

简单示例:

shell
# 例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命令,把一个变量声明成数值类型。

shell
# 给变量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运算工具示例如下:

shell
# 给变量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元算工具示例如下:

shell
# 示例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)方式三(推荐)

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

shell
# 给变量aa和bb赋值
[root@Lyl tmp]# aa=11
[root@Lyl tmp]# bb=22

# 求和
[root@Lyl ~]# cc=$(( $aa+$bb))
[root@Lyl ~]# echo $cc
33

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

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

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

__EOF__


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK