Shell运算符用于在命令行中执行数学运算、字符串操作、文件测试和条件判断等操作。Shell脚本中常用的运算符包括算术运算符、比较运算符、文件测试运算符和逻辑运算符。
算术运算符
算术运算分为整数运算和浮点数运算。常用运算符包括+(加)、−(减)、*(乘)、/(除)、%(取余)、++(自增)、−−(自减)。
整数运算通常使用expr命令、let命令和双括号运算符$(())。其中expr命令用于表达式求值,需要注意以下几点:
- 若要将表达式结果赋给变量,需要在expr命令两侧添加反引号(`)对执行结果进行引用。
- expr后的表达式运算符两侧需要留有空格。
- 做除法运算时,星号(*)需要使用斜杠转义,否则星号会被视为通配符。
Shell本身并不支持浮点运算,若要进行浮点运算需要使用第三方工具(通常使用计算器bc),使用bc工具前需要使用scale参数指定计算精度,然后将表达式通过管道符传递给bc进行计算。
运算符详解
1、++(自增)、−−(自减)表示将变量自身的值加1和减1。
- 前缀自增、前缀自减:当++和−−位于变量前时称为前缀自增和前缀自减,表示先将变量加1和减1之后再执行其它操作(例如:赋值)。
- 后缀自增、后缀自减:当++和−−位于变量后时称为后缀自增和后缀自减,表示先执行其它操作再将变量值加1和减1。
使用示例
1、整数运算。
1.1、expr命令:expr命令用于表达式求值。

1.2、let命令:let命令用于为变量赋值。使用let时,表达式运算符两侧无需留空格且除法无需转义。

1.3、$(()):双括号运算符。使用双括号运算符,表达式运算符两侧无需留空格且除法无需转义。

2、自增、自减运算:自增自减运算也可使用expr命令、let命令和双括号运算符$(())。
2.1、前缀自增、自减。

2.2、后缀自增、自减。

3、浮点运算。其中scale语句用于设置计算精度(小数保留位数)。

比较运算符
数字与字符串的比较可使用test命令,命令格式为:test 表达式。但test命令无返回值,所以在test语句执行后需要使用特殊变量$?获取执行结果,当测试条件成立时结果为0,否则结果为1。
运算符详解
1、数字比较运算符:
- −eq:等于(equals)。
- −ne:不等于(not equals)。
- −gt:大于(greater than)。
- −lt:小于(less than)。
- −ge:大于等于(greater equals)。
- −le:小于等于(less equals)。
2、字符串比较运算符:
- ==:等于,字符串内容是否相同。
- !=:不等于,字符串内容是否不同。
- −n:字符串长度是否大于零(not zero),前面可加感叹号对值进行取反操作,判断长度是否等于零。
- −z:字符串长度是否等于零(zero),前面可加感叹号对值进行取反操作,判断长度是否不等于零。
使用示例
1、数字比较运算符。

2、字符串比较运算符。

文件测试运算符
文件测试运算符用于检测文件是否存在、是否具有权限等属性。
运算符详解
- −e:文件是否存在(exist)。
- −f:是否是文件(file)。
- −d:是否是目录(directory)。
- −r:当前用户是否有读权限(read)。
- −w:当前用户是否有写权限(write)。
- −x:当前用户是否有执行权限(execute)。
使用示例
1、文件属性判断。

2、文件读写权限判断。

逻辑运算符
逻辑运算符用于对表达式进行逻辑判断,常用的逻辑运算符包括:−a(逻辑与)、−o(逻辑或)。
运算符详解
- −a:逻辑与(and),当−a连接的所有表达式都成立时最终结果成立,否则不成立。
- −o:逻辑或(or),当−o连接的所有表达式其中之一成立时最终结果成立,否则不成立。
使用示例
1、−a:逻辑与。

2、−o:逻辑或。
