7. 变量的数值计算实践
Shell 中的算术运算符概述
在 Shell 脚本中进行数学计算时,会使用多种算术运算符。与大多数编程语言相似,Shell 提供了丰富的操作符来支持整数和逻辑运算。
常见的 Shell 算术运算符包括:
- +、-:作为一元操作符时表示正号或负号;作为二元操作符时表示加法和减法。
- *、/、%:分别代表乘法、除法以及取余(即取模)运算。
- **:用于幂运算,例如 2**3 表示 2 的 3 次方。
- ++、--:自增与自减操作符,可以前置或后置在变量上。
- !、&&、||:逻辑非、逻辑与、逻辑或,常用于条件判断。
- <、<=、>、>=:比较操作符,表示小于、小于等于、大于、大于等于。
- ==、!=、=:用于数值相等或不相等的比较,其中 = 也可用于字符串匹配判断。
- <<、>>:位移操作符,向左移位和向右移位。
- ~、|、&、^:按位取反、按位或、按位与、按位异或。
- =、+=、-=、*=、/=、%=:赋值及复合赋值操作符。例如:
相当于a+=1
,a=a+1
相当于a-=1
。a=a-1
常用的 Shell 算术运算命令
除了基本的操作符外,Shell 还提供了多个可用于执行算术运算的命令工具:
- (()):双小括号结构,专用于整数运算和比较,执行效率高,是运维场景中的常用方式。
- let:用于整数运算,功能类似于
(( ))结构。(()) - expr:可处理整数运算,同时也支持字符串长度计算、模式匹配等额外功能。
- bc:Linux 下的功能强大计算器程序,支持浮点数运算,适合复杂精度要求的计算任务。
- $[]:早期用于整数运算的形式(现已较少使用),部分系统仍兼容。
- awk:不仅可以做整数运算,也支持小数运算,常用于脚本中需要格式化输出的场合。
- declare:用于声明变量及其属性,使用 -i 参数可定义整型变量并自动启用算术运算能力。
双小括号 (( )) 数值运算详解
(( )) 是 Shell 中高效的数值运算方法,适用于变量计算和条件测试,语法灵活且性能优异,广泛应用于自动化脚本中。
基础语法说明
((i = i + 1)):将表达式i+1的结果重新赋值给变量 i,属于“先运算后赋值”类型。- 注意:不能通过
echo $[i+1]输出表达式的值,而应使用echo $((i+1))来直接显示结果。echo ((i=i+l))echo $((i=i+l)) - 可在
((i+1))前添加i=实现赋值,即:
i=$((i+1)) 或((i=i+1))。 (( 8 > 7 && 5 == 5 )):支持逻辑组合的比较判断,可用于 if 语句等流程控制中。- 若要直接输出表达式结果,如
echo $((2+1)),则可在 (()) 外层加上 $() 进行扩展求值。let 表达式((表达式))
实际操作示例
[root@server bin 15:52:25]# echo $((i=i+1)) 1 [root@server bin 16:06:00]# i=1 [root@server bin 16:06:06]# echo $((i=i+1)) 2
let 命令的应用
let 命令专门用于整数运算,其语法格式如下:
let "表达式"
其作用等同于使用双小括号形式:
((表达式))
错误示例(未使用 let):
[root@server bin 16:06:08]# i=i+8 [root@server bin 16:06:40]# echo $i i+8
正确用法:
[root@server bin 16:06:49]# i=1 [root@server bin 16:06:53]# let i=i+8 [root@server bin 16:07:00]# echo $i 9
expr 命令的使用技巧
expr 不仅能完成整数计算,还可用于字符串相关操作,如获取长度、查找子串位置等。
示例:获取字符串长度
[root@server bin 16:07:05]# str="abc123abc123" [root@server bin 16:07:29]# expr length "$str" 12
使用 expr 时需注意以下规则:
- 运算符两侧必须至少有一个空格,否则会导致语法错误。
- 当使用乘法符号 * 时,必须使用反斜杠转义,即 \*,以避免 Shell 将其解释为通配符。
expr(evaluate(求值)expressions(表达式))expr
bc 命令:高精度计算工具
bc 是 UNIX/Linux 系统下的任意精度计算器程序,既可交互运行,也可通过管道传递表达式,特别适合涉及小数或高精度需求的运算。
交互模式示例:
[root@server bin 16:07:40]# 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'. scale=3 4/3 1.333 ^C (interrupt) Exiting bc.
非交互式调用方式:
[root@server bin 16:08:05]# echo 'scale=3;4/3' | bc
其中 scale=3 设置了小数点后保留三位。
bc在命令行中进行数值计算时,awk 命令表现出色,尤其适用于整数和小数的运算。其优势在于处理浮点数时精度高,使用起来非常方便。
[root@server bin 16:08:31]# echo 1.1 2.2 |awk '{$1+$2}'
[root@server bin 16:09:53]# echo 1.1 2.2 |awk '{print $1+$2}'
3.3
此外,也可以使用 $[] 符号来进行简单的算术操作。这种方式常用于整型变量的增减或基本数学计算。
[root@server bin 16:11:53]# count=1;echo $[--count] |echo $count
1
[root@server bin 16:12:45]# count=1;echo $[count--] |echo $count
1
[root@server bin 16:13:08]# count=1;echo $[--count]
[root@server bin 16:13:35]# count=1;echo $[count--]
1
[root@server bin 16:13:40]# count=1;echo $[count--] ;echo $count


雷达卡


京公网安备 11010802022788号







