在bash中,算术展开(arithmeticexpansion)可以获得算术表达式的运算结果。您还可以执行加法、减法、乘法和除法运算、比较大小、比较相等性、执行AND或NOT运算等。检查manbash的指令如下:算术展开允许计算算术表达式和替换结果。算术扩展的格式是:$((expression))旧格式$[expression]已弃用,将在即将发布的bash版本中删除。表达式被视为在双引号内,但括号内的双引号未被特殊处理。表达式中的所有标记都经过参数和变量扩展、命令替换和引号删除。结果被视为要评估的算术表达式。算术展开可以嵌套。评估是根据下面算术评估下列出的规则进行的。如果表达式无效,bash会打印一条消息指示失败并且不会发生替换。即$((expression))算术展开式会根据ARITHMETICEVALUATION描述的规则对expression算术表达式求值,得到表达式的值。在算术表达式中,默认情况下删除变量扩展、命令替换和引号。由于默认变量扩展,可以直接使用变量名获取变量值,无需在变量名前加$符号。如果你只是想计算一个算术表达式,你不需要获取算术表达式的值,只需要写((expression))。查看manbash对((expression))复合命令的描述,如下所示:((expression))表达式根据以下算术求值中描述的规则求值。如果表达式的值非零,则返回状态为0;否则返回状态为1。这完全等同于let"expression"。即如果写成((expression)),expression算术表达式也会按照ARITHMETICEVALUATION中描述的规则进行求值,但是无法得到表达式的值。它等同于let"expression"语句。具体的ARITHMETICEVALUATION规则可以参考manbash的说明。要点如下:运算符及其优先级、结合律、取值与C语言中相同。即在((expression))表达式中,所使用的运算符、运算符优先级、运算符组合规则与C语言一致。对于熟悉C语言的人来说,使用起来很方便。具体例子如下:$number=1$number+=5$echo$number15$number=$((number+3))$echo$number18$((number+=3))$echo$number21可以看到,先给number赋值1,然后执行number+=5语句。但是当打印number变量的值时,结果是15,而不是6。即直接写成number+=5是字符串拼接而不是算术运算。number=$((number+3))命令使用了算术展开,会得到number变量值加上3后的值,赋值给number变量值,即18。这个表达式进行算术运算。((number+=3))命令不使用算术展开,它只是处理算术表达式。通过算术表达式的+=赋值运算符,将number变量的值加3赋值给number变量。这种写法与number=$((number+3))命令的效果相同。在算术表达式中,可以直接通过number变量名获取变量值,不需要写成$number的形式。一般来说,在bash中,要进行算术表达式运算,需要使用特定的写法,或者在一些支持算术运算的命令中使用。直接写成一个算术表达式本身,不能进行算术运算。使用算法表达式进行比较判断在bash的算法表达式中,支持<=、>=、<、>、==、!=六种常用运算符,可以用来进行比较判断。假设有一个arth_check.sh脚本,其内容如下:#!/bin/bashif[$#-ne2];然后echo"Usage:$0number1number2"exit1finnumber1="$1"number2="$2"if((number1>number2));然后echo"$number1>$number2"elif((number1
