目录
数学计算,就离不开各种运算符号,shell 也有很多算术运算符,但是,Shell 和其它编程语言不同,Shell 不能直接进行算数运算,必须使用数学计算命令.
算数运算符一览表:
符号 | 含义 | 符号 | 含义 | 符号 | 含义 | 符号 | 含义 |
+ | 加号/正号 | ++ | 自增 | < | 比较符号:小于 | >> | 向右移位 |
- | 减号/负号 | -- | 自减 | > | 比较符号:大于 | << | 向左移位 |
* | 乘号 | ! | 逻辑非: 取反 | <= | 比较符号:小于等于 | ~ | 按位取反 |
/ | 除号 | && | 逻辑与: and | >= | 比较符号:大于等于 | | | 按位或 |
% | 取余 | || | 逻辑或: or | == | 比较符号:等于 | % | 按位与 |
** | 幂运算 | = | 赋值运算符:赋值 | != | 比较符号:不等于 | ^ | 按位异或 |
注意:不能直接进行算数运算,必须使用数学计算命令
运算操作符:
运算命令一览表:
运算操作符/运算命令 | 说明 |
(( )) | 用于整数运算,效率很高,推荐使用。 |
let | 用于整数运算,和 (()) 类似。 |
$[] | 用于整数运算,不如 (()) 灵活。 |
expr | 可用于整数运算,也可以处理字符串。比较麻烦,需要注意各种细节,不推荐使用。 |
bc | linux下的一个计算器程序,可以处理整数和小数。Shell 本身只支持整数运算,想计算小数就得使用 bc 这个外部的计算器。 |
declare -i | 将变量定义为整数,然后再进行数学运算时就不会被当做字符串了。功能有限,仅支持最基本的数学运算(加减乘除和取余),不支持逻辑运算、自增自减等,所以在实际开发中很少使用。 |
运算命令使用方法:
运算命令:(())
- 双小括号 (( )) 是 Bash shell 中专门用来进行整数运算的命令,它的效率很高,写法灵活,是企业运维中常用的运算命令。
- 注意:(( )) 只能进行整数运算,不能对小数(浮点数)或者字符串进行运算
[root@VM_0_9_centos ~]# echo $((1+1))
2
[root@VM_0_9_centos ~]# echo $((3-1))
2
[root@VM_0_9_centos ~]# echo $((3*1))
3
[root@VM_0_9_centos ~]# echo $((3/1))
3
运算命令:let
- let 命令和双小括号 (( )) 的用法是类似的,它们都是用来对整数进行运算。
- 注意:和双小括号 (( )) 一样,let 命令也只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。
- Shell let 命令的语法格式为: let 表达式 或者 let "表达式" 或者 let '表达式'
- 当表达式中含有 Shell 特殊字符(例如 |)时,需要用双引号
" "
或者单引号' '
将表达式包围起来- let 适合++ -- 自增 自减 运算,直接得出结果
[root@VM_0_9_centos ~]# a=7
[root@VM_0_9_centos ~]# b=8
[root@VM_0_9_centos ~]# let c=$a+$b
[root@VM_0_9_centos ~]# echo $c
15
[root@VM_0_9_centos ~]# i=1
[root@VM_0_9_centos ~]# let i++
[root@VM_0_9_centos ~]# echo $i
2
运算命令:$[]
- 和 (())、let 命令类似,$[] 也只能进行整数运算。
- shell $[] 的用法如下: $[表达式] $[] 会对表达式进行计算,并取得计算结果。
- 如果表达式中包含了变量,那么你可以加$,也可以不加。
[root@VM_0_9_centos ~]# echo $[1+1]
2
[root@VM_0_9_centos ~]# echo $[2*2+1]
5
[root@VM_0_9_centos ~]# echo $[(2*2+2)/2]
3
运算命令:expr
- expr 是 evaluate expressions 的缩写,译为“表达式求值”。
- expr 是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理
- 注意中间的空格(如果没有会当成一个整体)且只能用于整数计算(区别于小数)
- 另外使用来做乘法运算时要记得转义,小括号也需要转义,因为有特殊的含义(通配符)
[root@VM_0_9_centos ~]# expr 5 - 2
3
[root@VM_0_9_centos ~]# expr 5 + 2
7
[root@VM_0_9_centos ~]# expr 5 \* 2
10
[root@VM_0_9_centos ~]# expr \( 2 + 3 \) \* 2
10
运算命令:bc
- shell 内置了对整数运算的支持,但是并不支持浮点运算,而bc 命令可以很方便的进行浮点运算,当然整数运算也不再话下。
- bc 甚至可以称得上是一种编程语言了,它支持变量、数组、输入输出、分支结构、循环结构、函数等基本的编程元素
- 在终端输入
bc
命令,然后回车即可进入 bc 进行交互式的数学计算- 在脚本中,可以通过管道和输入重定向来使用 bc
[root@VM_0_9_centos ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+1
2
5*2
10
1.25*2
2.50
1.24/0.2
6
quit
脚本内使用
[root@VM_0_9_centos ~]# sh 1.sh
2
10
2.48
6
[root@VM_0_9_centos ~]# cat 1.sh
echo 1+1 |bc
echo 5*2 |bc
echo 1.24*2 |bc
echo 1.24/0.2 |bc