双小括号的作用是进行数值运算与数值的比较,它的效率很高,用法很灵活,是经常采用的操作符。
((i=i+1)) 它的作用就是把i+1的结果赋值给变量i。注意,不可以用 echo ((i=i+1)) 的形式输出表达式的值,但可以用echo $((i=i+1)) 输出其值。
i=$((i+1)) 作用就是把i+1的执行结果赋值给变量i。
((8>7&&5==5)) 用于数值之前的比较,用于条件判断。
echo $((2+1)) 用于直接输出运算表达式的结果,在(()) 前面加$符号。
范例1.利用(()) 进行简单的数值计算
[root@testdb ~]# echo $((1+1))
2
[root@testdb ~]# echo $((6-3))
3
[root@testdb ~]# ((i=5))
[root@testdb ~]# ((i=i*2))
[root@testdb ~]# echo $i
10
范例2.利用(())进行稍微复杂一些的综合算术运算
[root@testdb ~]# ((a=1+2**3-4%3))
[root@testdb ~]# echo $a
8
[root@testdb ~]# b=$((1+2**3-4%3))
[root@testdb ~]# echo $b
8
[root@testdb ~]# echo $((1+2**3-4%3))
8
[root@testdb ~]# a=$((100*(100+1)/2))
[root@testdb ~]# echo $a
5050
[root@testdb ~]# echo $((100*(100+1)/2))
5050
范例3.特殊运算符号的运算小示例
[root@testdb ~]# a=8
[root@testdb ~]# echo $((a=a+1))
9
[root@testdb ~]# echo $((a+=1))
10
[root@testdb ~]# echo $((a**2))
100
范例4.利用(())双括号进行比较判断
[root@testdb ~]# echo $((3<8))
1
[root@testdb ~]# echo $((8<3))
0
[root@testdb ~]# echo $((8==8))
1
[root@testdb ~]# if ((8>7 && 5==5))
> then
> echo yes
> fi
yes
范例5.在变量前后使用--和++特殊运算符的表达式
[root@testdb ~]# a=10
[root@testdb ~]# echo $((a++))
10
[root@testdb ~]# echo $a
11
[root@testdb ~]# a=11
[root@testdb ~]# echo $((a--))
11
[root@testdb ~]# echo $a
10
[root@testdb ~]# a=10
[root@testdb ~]# echo $a
10
[root@testdb ~]# echo $((--a))
9
[root@testdb ~]# echo $a
9
[root@testdb ~]# echo $((++a))
10
[root@testdb ~]# echo $a
10
[root@testdb ~]# myvar=99
[root@testdb ~]# echo $((myvar+1))
100
[root@testdb ~]# echo $(( myvar + 1 ))
100
[root@testdb ~]# myvar=$((myvar+1))
[root@testdb ~]# echo $myvar
100
范例6.通过(())运算赋值给变量
[root@testdb ~]# myvar=99
[root@testdb ~]# echo $((myvar+1))
100
[root@testdb ~]# echo $(( myvar + 1 ))
100
[root@testdb ~]# myvar=$((myvar+1))
[root@testdb ~]# echo $myvar
100
范例7.包含(()) 的各种常见运算符命令的执行示例
[root@testdb ~]# echo $((6+2))
8
[root@testdb ~]# echo $((6-2))
4
[root@testdb ~]# echo $((6*2))
12
[root@testdb ~]# echo $((6/2))
3
[root@testdb ~]# echo $((6%2))
0
[root@testdb ~]# echo $((6**2))
36
范例8.各种(())运算的shell脚本示例
[root@testdb ~]# cat test.sh
#!/bin/bash
a=6
b=2
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
[root@testdb ~]# sh test.sh
a-b=4
a+b=8
a*b=12
a/b=3
a**b=36
a%b=0
范例9.范例8改写成脚本传参的形式
[root@testdb ~]# cat test.sh
#!/bin/bash
a=$1
b=$2
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
[root@testdb ~]# sh test.sh 8 2
a-b=6
a+b=10
a*b=16
a/b=4
a**b=64
a%b=0
[root@testdb ~]# sh test.sh 10 2
a-b=8
a+b=12
a*b=20
a/b=5
a**b=100
a%b=0