Shell:操作符
在Shell脚本中,运算符用于执行数学计算、字符串操作、文件测试等任务。Shell脚本主要依赖于bash(Bourne Again SHell)或其他类似的shell环境,它们支持多种类型的运算符。下面我将详细介绍Shell中常见的一些运算符类型及其用法。
1. 算术运算符
算术运算符用于执行基本的数学运算,如加、减、乘、除等。在bash中,算术表达式可以通过几种方式执行,包括使用$((expression))扩展。
$((expression))和$[expression]都是用于执行算术扩展的语法。
- 对于新的Shell脚本编写,推荐使用
$((expression))语法进行算术扩展,因为它更符合POSIX标准,具有更广泛的兼容性和更强大的功能。- 而
$[expression]虽然在一些情况下仍然可用,但由于其历史性和可能的兼容性问题,建议避免在新脚本中使用。
$((expression))里面是可以直接跟一个数学上的运行式的,如:>=符号,而$[expression]中需要使用-ge。
+:加法-:减法*:乘法/:除法%:取模(余数)**:幂运算(在某些shell版本中可能需要使用let或expr)
示例:
|
|
2. 赋值运算符
赋值运算符用于给变量赋值。
=:赋值
示例:
|
|
3. 关系运算符
关系运算符用于测试两个值之间的关系(如等于、不等于、大于等)。在Shell中,这些运算符经常用在条件表达式中。
-eq:等于-ne:不等于-gt:大于-ge:大于等于-lt:小于-le:小于等于
示例(使用if语句):
|
|
4. 字符串运算符
字符串运算符用于检查字符串是否相等、长度是否为零等。
=:等于!=:不等于-z:字符串长度为零-n:字符串长度非零str:字符串不为空
注意
-
在
[中,应该使用=来比较字符串是否相等,而不是==(尽管在一些 shell 实现中,==可能也有效,但这不是 POSIX 标准的行为)。 -
在
[[中,=和==通常都可以用于字符串比较,但=是更符合 POSIX 标准的做法。
示例:
|
|
5. 文件测试运算符
文件测试运算符用于检查文件的各种属性,如文件是否存在、是否可读等。
-e:文件存在-f:文件存在且是一个常规文件-s:文件存在且不为空-d:文件存在且是一个目录-r:文件存在且可读-w:文件存在且可写-x:文件存在且可执行
示例:
|
|
这些只是Shell中运算符的一个概览。根据你所使用的具体Shell(如bash、zsh等),可用的运算符和语法可能会有所不同。
6. let命令
在Shell脚本中,let命令主要用于执行算术运算。然而,需要注意的是,let命令并不是所有Shell环境(如bash、sh、zsh等)都原生支持的。特别是,在bash中,虽然let可以用于执行算术运算,但通常建议使用更现代的算术扩展方式,如$((expression))。
let命令的基本语法
|
|
或者
|
|
其中,expression是一个或多个算术表达式,用空格分隔。算术表达式可以包括变量、数字以及算术运算符(如+、-、*、/、%(取模)等)。
示例
1.简单的算术运算
|
|
在这个例子中,我们首先给变量a赋值5,然后使用let命令将a与10相加的结果赋给变量b。
2.使用双引号
虽然在这个简单的例子中双引号不是必需的,但在更复杂的表达式中,使用双引号可以避免解析错误。
|
|
然而,请注意,在bash中,通常不需要在let表达式周围使用双引号,除非表达式中包含空格或其他需要引起来的字符。
3.递增和递减
|
|
4.更复杂的表达式
|
|
在这个例子中,我们同时计算了三个变量a、b和c的值。