数值变量的运算及特殊变量
在 Bash Shell 环境中,只能进行简单的整数运算,不支持小数运算
整数值的运算主要通过内部命令 expr 进行
运算符与变量之间必须有至少一个空格。
运算内容:加(+)、减(-)、乘(*)、除(/)、取余(%)
运算符号:
(
(
)
)
和
(()) 和
(())和[]
运算命令:expr和let
运算工具:bc(系统自带)
expr命令(不仅可以运算,还支持输出到屏幕)
常用的 几种运算符如下所述。
+:加法运算。
-:减法运算。
*:乘法运算,注意不能仅使用“*”符号,否则将被当成文件通配符。
/:除法运算。
%:求模运算,又称为取余运算,用来计算数值相除后的余数。
例1
[root@server myscripts]# expr 1 + 1
2
[root@server myscripts]# expr 1+1
1+1
[root@server myscripts]# expr 2 * 2
expr: 语法错误
[root@server myscripts]# expr 2 * 2 //乘法需要转义
4
[root@server myscripts]# expr 2 '’ 2 //乘法也可以用单引号表示但没太大必要因为只有一个字符
4
expr不仅支持常量还支持变量的运算:
例2
[root@localhost ~]# X=35
[root@localhost ~]# Y=16
[root@localhost ~]# expr $X + 5
40
[root@localhost ~]# expr $X + $Y
51
[root@localhost ~]# expr $X - $Y
19
[root@localhost ~]# expr $X * $Y
560
[root@localhost ~]# expr $X / $Y
2
[root@localhost ~]# expr $X % $Y
3
例3
sum=expr $Y \* $Y \* $Y
echo $sum
例4
#!/bin/bash
#1.定义输出数字
read -p “请输入第一个数字:” num1
read -p “请输入第二个数字:” num2
#2.执行加法运算
expr $num1 + $num2
echo “求和数:$sum”
其他看时间是否够用
[ ] 和 []和 []和(()) 必须要和echo在一起用因为他只能运算无法输出结果
[root@server myscripts]# echo $((1+1))
2
[root@server myscripts]# echo $((5-2))
3
[root@client opt]# echo $((a-b))
7
[root@client opt]# echo $((b-a)) //可以有负数
-7
$[]整数运算
[root@server myscripts]# echo
[
10
∗
10
]
/
/
[10*10] //
[10∗10]//[]里的*不需要转义
100
[root@server myscripts]# echo $[10%8]
2
[root@server myscripts]# echo $[10/8]
1
[root@server myscripts]# echo $[10/12]
0
[root@server myscripts]# echo $[10%12]
10
[
]
变
量
的
运
算
,
可
省
略
[
]
里
的
[]变量的运算,可省略[]里的
[]变量的运算,可省略[]里的
[root@client opt]# echo
[
[
[a+$b]
13
[root@client opt]# echo $[a+b]
13
[root@client opt]# echo $[a-b]
7
[root@client opt]# echo $[a*b]
30
[root@client opt]# echo $[a/b]
3
[root@client opt]# echo $[a%b]
1
[root@client opt]# echo $[a+b+c]
38
[root@client opt]# echo $[a+b*c] //遵循先乘除后加减,否则需要用括号括起来表示优先运算
75
[root@client opt]# echo $[(a+b)*c]
360
let运算
let的运算可以改变变量本身的值,但不显示结果,需要echo,其他的运算方式可以做运算但不改变变量本身的值
[root@server myscripts]# n=1;let n=n+1;echo $n
2
[root@server myscripts]# let n+=2 //n=n+2
[root@server myscripts]#
[root@server myscripts]# echo $n
4
[root@server myscripts]# let n=n**2 //求幂,4的2次方
[root@server myscripts]# echo $n
16
[root@server myscripts]# let n++ //n自加1
[root@server myscripts]# let n-- //n自减1
[root@client opt]# echo $a
13
[root@client opt]# echo $[a++] //先输出再自增1,这时a的值已经变了
13
[root@client opt]# echo $a
14
[root@client opt]# echo $[++a] //先自增1再输出,所以直接输出了变化后的值
15
[root@client opt]# echo $a
15
bc运算
使用bc进行运算,支持小数运算,但在脚本中不可直接使用否则会进入交互界面,可以用echo结合管道使用
[root@localhost ~]# 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’.
10/3
3
scale=3 //指定小数点后几位
10/3
3.333
[root@localhost ~]# echo “scale=3;10/3” | bc
3.33310
[root@client ~]# echo “3^2” | bc //做幂的运算,计算3的平方
9
bc做变量的运算:
[root@localhost ~]# a=10
[root@localhost ~]# b=3
[root@localhost ~]# echo “
a
/
a/
a/b” | bc
3
[root@localhost ~]# echo “scale=2;
a
/
a/
a/b” | bc
3.33
bc还可以做逻辑运算,真为1,假为0
[root@client ~]# echo “2>2” | bc
0
[root@client ~]# echo “2==2” | bc
1
[root@client ~]# echo “2<2” | bc
0
练习:
写一个脚本求圆的面积
常用的运算表达式:
i=KaTeX parse error: Undefined control sequence: \* at position 10: (expr 12 \̲*̲ 5) i=((12 * 5))
i=[12 * 5]
let i=12*5
i++ 相当于 i=
[
[
[i+1]
i-- 相当于 i=
[
[
[i-1]
i+=2 相当于 i=
[
[
[i+2]