双括号(()),shell与C++的桥梁

使用语法:
((表达式))用来扩展Shell中的算术运算,以及赋值运算,扩展for,while,if条件测试运算.

注意点:
1.在双括号结构中,所有的表达式可以像c语言一样,如a++,b--
2.在双括号结构中,所有变量可以不加入$符号前缀,也可以加入.
3.在双括号可以进行逻辑运算,四则运算,而且运算符合数值之间可以没有空格,也可以有空格.
4.双括号结构扩展了for,while,if条件测试运算.
5.支持多个表达式运算,各个表达式之间用逗号,分开.
6.使用[]时必须保证运算符与数值之间有空格,而(())时数值与运算符可以没有空格.

四则运算

val++    后增      

val--     后减

++val    先增

--val     先减

为了便于理解,这里有个脚本

#! /bin/bash

num=1

while ((num<100))    #数值与运算符可以没有空格,变量的使用时也可以不使用$num
do
        echo "$num"
        ((num=++num))  #当变为((num=num++))时,结果为1的无限循环
done

此脚本运行的结果为输出1到99。先增与后增时,输出的结果完全不同

逻辑运算

#!/bin/bash

a=2;
((b=a**3));

echo $((b>=8?8:9));

(($?!=1))&& echo "ok";

在双括号内可以直接使用逻辑表达式,双小括号内的“?”则代表了shell中的if-then-else结构,如上面的((b>8?8:9))表示如果b>=8则输出8,否则输出9,这就是一个典型的C++语言,

变量可以带$,也可以不带。

流程控制

#!/bin/bash

num=100;
total=0;

for((i=0;i<=num;i++));
do
    ((total+=i));
done
echo $total;

total=0;
i=0;
while((i<=num));
do
    ((total+=i,i++));
done
echo $total;

if((total>=5050));then
    echo "ok";
fi

上面的两个模块,都是计算1到100间所有值的和,当结果满足预期则输出‘ok’

原文地址:https://www.cnblogs.com/shc336/p/10178120.html