数学计算,就离不开各种运算符号,shell 也有很多算术运算符,但是,Shell 和其它编程语言不同,Shell 不能直接进行算数运算,必须使用数学计算命令.
算数运算符一览表:
注意:不能直接进行算数运算,必须使用数学计算命令
运算操作符:
运算命令一览表:
运算命令使用方法:
运算命令:(())
- 双小括号 (( )) 是 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