SHELL之数值运算

【四则运算符号】

表达式 举例
$(( )) echo $((1+1))
$[ ] echo $[10-5]
expr expr 10 / 5 (运算符左右有空格)
let n=1;let n+=1 等价于 let n=n+1

一、整数运算
1、基本运算类别

  • 加法:+
  • 减法:-
  • 乘法:*
  • 整除:/
  • 取余数:%

2、expr运算工具

  • 加法:+
  • 减法:-
  • 乘法:*
  • 整除:/
  • 取余数:%

3、$[ ]算式替换

使用$[ ] 或 $(( ))表达式

  • 格式:$[整数1 运算符 整数2 .. ..]
  • 乘法操作*无需转译,运算符两侧可以无空格
  • 引用变量可省略$符号
  • 计算结果替换表达式本身,可结合echo命令输出

$(()) 是标准的算术运算语法,而 $[] 不是标准的,可能是特定环境下的别名或特殊配置。在编写可移植的Shell脚本时,应优先使用 $(())。

注意:

脚本第2行
	if [ $# -lt 1  -o $1 -gt 9  ] ; then
如果替换为 :
	if (( $# <  1  ||  $1  >  9  )); then
结果会怎么样 ? 为什么 ? 
在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”。但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)

&&,逻辑的and的意思, -a也是这个意思;
||,逻辑的or的意思, -o 也是这个意思

[root@scp1 ~]# x=30
[root@scp1 ~]# echo $[x+20]
50
[root@scp1 ~]# echo $((x+10)),$((x*60))
40,1800

4、变量的自增/减等操作

使用$[]替换,或let命令完成
结合echo命令查看结果

二、小数运算

1、整数运算的局限性

  • bash内建机制仅支持整数值运算
  • expr命令、$[] 算式运算不支持有小数的运算

2、使用bc实现小数的运算

多数linux系统默认安装此工具

  • 支持高精度的数值运算
  • 直接运行bc可进入交互式运算界面,quit退出
  • 设置scale=n 可约束小数位

结合管道向bc发送表达式

  • 多个表达式以分号分隔
  • 通过echo命令+管道传递要计算的表达式

小数值的比较
基本用法

  • echo "数值1 比较符 数值2" | bc
  • 如果表达式成立,则返回的计算结果为1,否则返回0
  • 常见的比较操作:>、>=、<、<+、==、!=

三、了解i++和++i

  • ++ 是后缀自增运算符,表示在表达式求值后,变量 i 的值增加 1。
  • ++j 是前缀自增运算符,表示在表达式求值前,变量 j 的值增加 1。

在表达式 let x=i++ 中,i 的值在赋值给 x 后增加,所以 x 得到的是 i 增加前的值。而在表达式 let y=++j 中,j 的值在赋值给 y 之前就已经增加了,所以 y 得到的是 j 增加后的值。

1、对变量的值的影响

[root@MissHou ~]# i=1
[root@MissHou ~]# let i++
[root@MissHou ~]# echo $i
2
[root@MissHou ~]# j=1
[root@MissHou ~]# let ++j
[root@MissHou ~]# echo $j
2

2、对表达式的值的影响

[root@MissHou ~]# unset i j
[root@MissHou ~]# i=1;j=1
[root@MissHou ~]# let x=i++         先赋值,再运算
[root@MissHou ~]# echo $x
1
[root@MissHou ~]# let y=++j         先运算,再赋值
[root@MissHou ~]# echo $y
2
[root@MissHou ~]# echo $i
2
[root@MissHou ~]# echo $j
2
posted @ 2024-08-20 11:05  *一炁化三清*  阅读(18)  评论(0编辑  收藏  举报