Shell系列(6) - shell基本运算符

162 阅读2分钟

「4月日新计划更文活动」

运算符

  • 算法运算符
  • 关系运算符
  • 逻辑运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

注意bash不支持简单数学运算,可以通过其他方式实现

关系运算符

对比两个数之间是否相等

  • -eq对比两个数之间是否相等,相等返回ture,否则反之
  • -ne对比两个数之间是否不相等,不相等返回true,否则反之
  • 注意:外面使用[]括号
[$num -eq $num2]
[$num -ne $num2]

对比两个数之间左右大小

  • -gt对比左边的数是否大于右边的数( *> *),如果是,则返回true,否则反之
  • -lt对比左边的数是否小于右边的数( *< *),如果是,则返回true,否则反之
  • -ge对比左边的数是都大于等于右边的数( >=),如果是,则返回true,否则反之
  • -le对比左边的数是否小于等于右边的数( <=),如果是,则返回true,否则反之
  • 注意:外面使用[]括号
[$a -gt $b]
[$a -lt $b]
[$a -ge $b]
[$a -le $b]

逻辑运算符

  • 逻辑运算符 : &&
  • 定义:逻辑与运算符使用两个“&”符号表示。当左右两侧的条件都为真时,结果为真
[[ $a -lt 100 && $b -gt 100 ]]
  • 逻辑运算符: ||
  • 定义:逻辑或运算符使用两个“|”符号表示。当左右两侧的条件中至少有一个为真时,结果为真
[[ $a -lt 100 || $b -gt 100 ]]
  • 逻辑运算符: !
  • 定义:逻辑非运算符使用一个“!”符号表示。它将原来的条件反转,即如果原来的条件为真,则结果为假;如果原来的条件为假,则结果为真
[[ $a -lt 100]]

布尔运算符

  • 布尔运算内包含:非运算、或运算、与运算
  • 非运算用于取反条件的结果
  • 或运算-o用于将两个条件连接起来,只要其中一个条件为真,就返回真
  • 与运算-a用于将两个条件连接起来,只有当两个条件都为真时才返回真
  • 注意:使用布尔运算符时,需要用方括号[]或双括号[[]]将条件括起来
[ $a != $b ]
[ "$var" = "value" ] -o "$var2" -gt 10
[ "$var" = "value" ] -a "$var2" -gt 10

字符串运算符

  • =用于检测两个字符串是否相等,相等则返回true
  • != 检测两个字符串是否不想等,不想等返回true
  • -z检测字符串长度是否为0,为0返回true
  • -n 检测字符串长度是否不为0,不为0返回true
  • $ 检测字符串是否不为空,不为空返回true
[a = b]
[a != b]
[-z a]
[-n a]
[$a]

文件测试运算符

  • -e filename检测文件是否存在,如果是,则返回 true
  • -f filename检测文件是否为常规文件,如果是,则返回 true
  • -d filename检测文件是否为目录,如果是,则返回 true
  • -r filename检测文件是否可读,如果是,则返回 true
  • -w filename检测文件是否可写,如果是,则返回 true
  • -x filename检测文件是否可执行,如果是,则返回 true
  • -s filename检测文件是否为空,如果是,则返回 true
  • filename1 -ef filename2检测文件是否为同一文件,如果是,则返回 true
  • -L filename检测文件是否为符号链接,如果是,则返回 true
  • filename1 -nt filename2检测文件的修改时间是否比另一个文件新,如果是,则返回 true
  • filename1 -ot filname2检测文件的修改时间是否比另外一个文件旧,如果是,则返回 true
  • -u filename 检测文件的UID是否为有效用户ID,如果是,则返回 true
  • -k filename检测文件是否具有粘滞位,如果是,则返回 true
  • -g filename 检测文件的GID是否为有效组ID,如果是,则返回 true
  • -t filename检测文件的权限是否有粘滞位,如果是,则返回 true
  • -s filename检测文件是否为空,如果是,则返回 true
  • -b filename检测文件是否为块设备文件,如果是,则返回 true
  • -S filename检测文件是否为套接字文件,如果是,则返回 true
  • -p filename检测文件是否为FIFO文件,如果是,则返回 true
[-e filename]
[-f filename]
[-d filename]
[-r filename]
[-w filename]
[-x filename]
[-s filename]
[filename1 -ef filename2]
[-L filename]
[filename1 -nt filename2]
[filename1 -ot filname2]
[-u filename]
[-k filename]
[-g filename]
[-t filename]
[-s filename]
[-b filename]
[-S filename]
[-p filename]