Skip to content

shell运算符

在Shell编程中,运算符用于执行各种算术、字符串和逻辑操作。以下是一些常见的Shell运算符及其用法:

算术运算符

Shell中的算术运算符通常用于整数运算。以下是一些常见的算术运算符:

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • %:取余
  • **:幂运算(在某些Shell中可能需要启用扩展)

示例

sh
#!/bin/bash

a=10
b=5

sum=$((a + b))
diff=$((a - b))
prod=$((a * b))
quot=$((a / b))
rem=$((a % b))
exp=$((a ** b))  # 在某些Shell中可能需要使用 let 或 bc

echo "Sum: $sum"
echo "Difference: $diff"
echo "Product: $prod"
echo "Quotient: $quot"
echo "Remainder: $rem"
echo "Exponentiation: $exp"  # 如果不支持,可以使用 let 或 bc

注意:在某些Shell中(如Bash),**运算符可能不被直接支持,可以使用let命令或bc工具进行幂运算。

字符串运算符

字符串运算符用于比较和测试字符串。以下是一些常见的字符串运算符:

  • =:等于
  • !=:不等于
  • -z:字符串长度为零
  • -n:字符串长度非零
  • str1 =~ regex:字符串匹配正则表达式(Bash特有)

示例

sh
#!/bin/bash

str1="hello"
str2="world"
str3=""

if [ "$str1" = "$str2" ]; then
  echo "str1 is equal to str2"
else
  echo "str1 is not equal to str2"
fi

if [ -z "$str3" ]; then
  echo "str3 is empty"
else
  echo "str3 is not empty"
fi

if [[ "$str1" =~ ^he.* ]]; then
  echo "str1 matches the regex"
else
  echo "str1 does not match the regex"
fi

关系运算符

关系运算符用于测试两个数值之间的关系。以下是一些常见的关系运算符:

  • -eq:等于
  • -ne:不等于
  • -lt:小于
  • -le:小于或等于
  • -gt:大于
  • -ge:大于或等于

示例

sh
#!/bin/bash

a=10
b=20

if [ $a -eq $b ]; then
  echo "a is equal to b"
else
  echo "a is not equal to b"
fi

if [ $a -lt $b ]; then
  echo "a is less than b"
else
  echo "a is not less than b"
fi

逻辑运算符

逻辑运算符用于布尔运算。以下是一些常见的逻辑运算符:

  • !:逻辑非
  • -a:逻辑与(AND)
  • -o:逻辑或(OR)

示例

sh
#!/bin/bash

a=true
b=false

if [ $a -a $b ]; then
  echo "Both a and b are true"
else
  echo "Either a or b is false"
fi

if [ ! $a ]; then
  echo "a is false"
else
  echo "a is true"
fi

注意:在[[ ... ]]条件测试结构中,逻辑与和逻辑或可以使用&&||代替-a-o

位运算符

位运算符用于对整数进行位操作。以下是一些常见的位运算符:

  • <<:左移
  • >>:右移
  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位非

示例

sh
#!/bin/bash

a=60  # 60 = 0011 1100 
b=13  # 13 = 0000 1101

let c=a<<2   # c = 240 = 1111 0000
let d=a>>2   # d = 15 = 0000 1111
let e=a&b    # e = 12 = 0000 1100
let f=a|b    # f = 61 = 0011 1101
let g=a^b    # g = 49 = 0011 0001
let h=~a     # h = -61 = 1100 0011

echo "a << 2 -> $c"
echo "a >> 2 -> $d"
echo "a & b -> $e"
echo "a | b -> $f"
echo "a ^ b -> $g"
echo "~a -> $h"

这些是Shell编程中一些常见的运算符及其用法。根据具体需求,可以选择合适的运算符进行编程。