1、两个小括号用来对整数进行算术运算和逻辑运算,比如。
例如给变量赋值:
$ a=1+1; echo $a 1+1 $ (( b = 1 + 1 )); echo $b 2
1+1
只是一个字符串,而 b
就是一个算术表达式结果。
正是因为是算术表达式,所以比较也是按数字本身而不是字符串:
$ (( 3 > 1 )); echo $? 0 $ (( 3 > 6 )); echo $? 1 $ (( 3 > 10 )); echo $? 1
所以也可以套上 if 语句来用:
[root@noi ~]# if((3>1)) > then > echo "right,3>1" > fi right,3>1
[root@noi ~]# a=3;b=10 [root@noi ~]# if((a>b));then > echo "$a > $b" > else > echo "$a < $b" > fi 3 < 10
2、(())还具有C语言类型变量增减的功能。如:
[root@noi ~]# a=2 [root@noi ~]# ((a++)) [root@noi ~]# echo $a 3
3、只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,
输出结果全都自动转化成了十进制。如:
[root@noi ~]# echo $((16#5f)) 95
4、双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。
#这个i不用$,是因为这里是定义,而不是使用
[root@noi ~]# for i in $(seq 100) > do
#因为i在双括号中,可以省掉$,可以看出shell也是挺人性化的,只要不是为了填坑,尽量方便大家哦。 > if((i%12==0));then > echo $i > fi > done 12 24 36 48 60 72 84 96
看到没?有的加了$,有的却不需要,但是原谅bash吧,它的奇怪行为大多为了填坑补洞。
上面的式子用for写:
[root@noi ~]# for((i=0;i<100;i++)) > do > if((i%12==0)) > then > echo $i > fi > done 0 12 24 36 48 60 72 84 96
5、附加几个常用的式子:
if ($i<5) if [ $i -lt 5 ] if [ $a -ne 1 -a $a != 2 ] if [ $a -ne 1] && [ $a != 2 ] if [[ $a != 1 && $a != 2 ]] for i in $(seq 0 4);do echo $i;done for i in `seq 0 4`;do echo $i;done for ((i=0;i<5;i++));do echo $i;done for i in {0..4};do echo $i;done
先写到这里,特别感谢:
http://blog.csdn.net/tttyd/article/details/11742241
http://blog.csdn.net/xibeichengf/article/details/51226052
http://blog.csdn.net/u012598668/article/details/42236427