Bash中的括号(三)

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

posted @ 2017-05-23 20:23  立体风  阅读(320)  评论(0编辑  收藏  举报