目录
在Unix/Linux Shell脚本中,支持多种类型的运算符,包括算术运算符、逻辑运算符、位运算符、文件测试运算符等。这些运算符主要用于条件判断、表达式计算等场景。下面是详细分类及其用法:
1. 算术运算符
算术运算符用于数值计算,通常在expr
命令或者let
/(( ))
构造中使用。
+
加法-
减法*
乘法/
除法%
取模**
幂运算(仅限于 Bash 4.0 及更高版本)
示例:
bash
深色版本
1#!/bin/bash
2a=10
3b=3
4sum=$((a + b))
5diff=$((a - b))
6prod=$((a * b))
7quot=$((a / b))
8rem=$((a % b))
9power=$((a ** b))
10
11echo "Sum: $sum"
12echo "Difference: $diff"
13echo "Product: $prod"
14echo "Quotient: $quot"
15echo "Remainder: $rem"
16echo "Power: $power"
2. 关系运算符
关系运算符用于比较两个数值,通常与test
或[
命令一起使用。结果为布尔值。
-eq
相等-ne
不等-lt
小于-le
小于等于-gt
大于-ge
大于等于
示例:
bash
深色版本
1#!/bin/bash
2a=10
3b=3
4
5if [ $a -eq $b ]; then
6 echo "a is equal to b"
7elif [ $a -lt $b ]; then
8 echo "a is less than b"
9else
10 echo "a is greater than b"
11fi
3. 逻辑运算符
逻辑运算符用于组合多个条件表达式,通常与test
或[
命令一起使用。
-a
逻辑与(AND)-o
逻辑或(OR)!
逻辑非(NOT)
示例:
bash
深色版本
1#!/bin/bash
2a=10
3b=3
4
5if [ $a -gt $b ] && [ $b -gt 0 ]; then
6 echo "a is greater than b and b is greater than 0"
7fi
4. 字符串运算符
字符串运算符用于比较和处理字符串,通常与test
或[
命令一起使用。
=
字符串相等!=
字符串不等-z
字符串为空(长度为零)-n
字符串非空(长度不为零)
示例:
bash
深色版本
1#!/bin/bash
2str1="hello"
3str2="world"
4
5if [ "$str1" = "$str2" ]; then
6 echo "Strings are equal"
7else
8 echo "Strings are not equal"
9fi
5. 文件测试运算符
文件测试运算符用于检查文件的各种属性,通常与test
或[
命令一起使用。
-e
文件是否存在-r
文件是否可读-w
文件是否可写-x
文件是否可执行-f
是否为普通文件-d
是否为目录-s
文件是否非空(具有非零字节数)
示例:
bash
深色版本
1#!/bin/bash
2file="/path/to/file"
3
4if [ -e "$file" ]; then
5 echo "File exists"
6else
7 echo "File does not exist"
8fi
9
10if [ -r "$file" ]; then
11 echo "File is readable"
12else
13 echo "File is not readable"
14fi
6. 位运算符
位运算符用于对二进制位进行操作,通常在let
或(( ))
构造中使用。
&
按位与|
按位或^
按位异或~
按位取反<<
左移>>
右移
示例:
bash
深色版本
1#!/bin/bash
2a=$(( 0b1100 ))
3b=$(( 0b1010 ))
4
5and=$(( a & b ))
6or=$(( a | b ))
7xor=$(( a ^ b ))
8not=$(( ~a ))
9lshift=$(( a << 2 ))
10rshift=$(( a >> 2 ))
11
12echo "And: $(printf '%#x' $and)"
13echo "Or: $(printf '%#x' $or)"
14echo "Xor: $(printf '%#x' $xor)"
15echo "Not: $(printf '%#x' $not)"
16echo "Left Shift: $(printf '%#x' $lshift)"
17echo "Right Shift: $(printf '%#x' $rshift)"
7. 组合表达式
可以使用括号()
来分组表达式,使表达式的优先级更加明确。
示例:
bash
深色版本
1a=10
2b=3
3result=$(( (a + b) * 2 ))
4
5echo "Result: $result"
注意事项
- 使用
test
或[
命令时,需要确保正确的语法格式,例如所有的运算符和参数之间必须有空格。 - 对于数字运算,推荐使用
let
或(( ))
构造,因为它们不需要额外的命令来解析表达式。 - 在进行字符串比较时,通常使用双引号
"$var"
来确保变量正确展开。 - 文件测试运算符要求路径名是绝对路径或者相对路径能够正确解析到文件。