Shell 运算符


运算符应用在一个或多个运算数上,返回一个结果值。


运算符类型

Shell有下面几种运算符:

  • 赋值运算符,包含=、+=、-=、*=、/=、%=、&=、|=、^=、>>=、<<=。=,用于给变量赋值。
  • 算术运算符,包含+、-、、/、*、%,分别为加、减、乘、除、指数、取余数运算符。
  • 位运算符,包含&、|、~、^、<<、>>。&是按位与(and)运算符,|是按位或(or)运算符,~是反转(not)运算符,^是按位异或(xor)运算符,<<是有符号左移运算符,>>是有符号右移运算符。
  • 逻辑运算符,包含!、&&、||、-a、-o。!是取反(not)运算符,&&和-a是与(and)运算符,||和-o是或(or)运算符。
  • 比较运算符,包含-z、-n用来判断字符串是否为空,-e、-f、-d、-t、-x用于文件测试,<、>、<=、>=、==、=、!=用于字符串比较(==和=都用来比较是否相等),-lt、-gt、-le、-ge、-eq、-ne用于整数比较。
  • 三元运算符(ternary operator),?:,共有3个运算数(都必须是算术表达式),格式为expr1 ? expr2 : expr3,如果expr1为true,则计算expr2,否则计算expr3。

算术运算符

算术运算有两种写法:

  • 使用let命令,例如let "i+=1"或let i+=1
  • 使用(())命令,例如((i++))

例子:

#!/bin/sh
i=1
let "i+=1"
echo $i  # 2
((i++))
echo $i  # 3
j=$((i+1))
echo $j  # 4

逻辑运算符

-a(逻辑and)和-o(逻辑or)和test命令一起使用,位于单个括号中。

#!/bin/sh
i=2
if [ $i -gt 1 -a $i -lt 3 ] ; then
  echo "1 < i and i < 3"  # 1 < i and i < 3
fi

if [ $i -gt 1 ] && [ $i -lt 3 ] ; then
  echo "1 < i < 3"  # 1 < i < 3
fi

比较运算符

-z用于判断字符串是否为空(长度为0),-n判断字符串是否为非空。-f用来判断一个文件是否存在且是普通文件。

#!/bin/sh
if [ -z $s ] ; then
  echo "null str" # null str
fi

if [ -f "/etc/passwd" ] ; then
  echo "exist passwd" # exist passwd
fi

i=3
if [ "$i" -gt 1 ] ; then
  echo "i > 1"  # i > 1
fi

s="hello"
if [ "$s" = "hello" ] ; then
  echo "="  # =
fi

三元运算符

三元运算符用在(())命令中。

#!/bin/sh
i=3
(( i > 3 ? i++ : i-- ))
echo $i # 2
(( j = i < 3 ? i * 2 : i * 3 ))
echo $j # 4