在Linux shell脚本中,关系运算符用于比较两个值之间的关系,通常用于条件判断语句中。以下是常用的关系运算符分类和说明:
用于比较整数数值:
-eq:等于 (Equal)
if [ $a -eq $b ]; then
echo "$a 等于 $b"
fi
-ne:不等于 (Not Equal)
if [ $a -ne $b ]; then
echo "$a 不等于 $b"
fi
-gt:大于 (Greater Than)
if [ $a -gt $b ]; then
echo "$a 大于 $b"
fi
-lt:小于 (Less Than)
if [ $a -lt $b ]; then
echo "$a 小于 $b"
fi
-ge:大于等于 (Greater or Equal)
if [ $a -ge $b ]; then
echo "$a 大于等于 $b"
fi
-le:小于等于 (Less or Equal)
if [ $a -le $b ]; then
echo "$a 小于等于 $b"
fi
用于比较字符串:
=:字符串相等
if [ "$str1" = "$str2" ]; then
echo "字符串相同"
fi
!=:字符串不相等
if [ "$str1" != "$str2" ]; then
echo "字符串不同"
fi
-z:字符串长度为0 (Zero)
if [ -z "$str" ]; then
echo "字符串为空"
fi
-n:字符串长度非0 (Non-zero)
if [ -n "$str" ]; then
echo "字符串不为空"
fi
>:字符串大于(按字典顺序)
if [[ "$str1" > "$str2" ]]; then
echo "$str1 在字典顺序上大于 $str2"
fi
<:字符串小于(按字典顺序)
if [[ "$str1" < "$str2" ]]; then
echo "$str1 在字典顺序上小于 $str2"
fi
用于测试文件属性:
-e:文件存在 (Exist)
if [ -e "/path/to/file" ]; then
echo "文件存在"
fi
-f:是普通文件 (File)
if [ -f "/path/to/file" ]; then
echo "是普通文件"
fi
-d:是目录 (Directory)
if [ -d "/path/to/dir" ]; then
echo "是目录"
fi
-r:文件可读 (Readable)
if [ -r "/path/to/file" ]; then
echo "文件可读"
fi
-w:文件可写 (Writable)
if [ -w "/path/to/file" ]; then
echo "文件可写"
fi
-x:文件可执行 (eXecutable)
if [ -x "/path/to/file" ]; then
echo "文件可执行"
fi
-s:文件大小不为0 (Size)
if [ -s "/path/to/file" ]; then
echo "文件不为空"
fi
用于组合多个条件:
!:逻辑非
if [ ! -f "/path/to/file" ]; then
echo "不是普通文件"
fi
-a 或 &&:逻辑与 (AND)
if [ $a -gt 0 -a $a -lt 10 ]; then
echo "$a 在0到10之间"
fi
# 或
if [[ $a -gt 0 && $a -lt 10 ]]; then
echo "$a 在0到10之间"
fi
-o 或 ||:逻辑或 (OR)
if [ $a -lt 0 -o $a -gt 10 ]; then
echo "$a 小于0或大于10"
fi
# 或
if [[ $a -lt 0 || $a -gt 10 ]]; then
echo "$a 小于0或大于10"
fi
[ ]测试结构中,运算符和操作数之间需要有空格[[ ]]是bash的扩展测试命令,支持更多特性(如模式匹配、正则表达式等)(( ))算术运算中,可以使用传统的数学比较运算符:==, !=, >, <, >=, <=#!/bin/bash
a=10
b=20
# 数值比较
if [ $a -eq $b ]; then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
# 字符串比较
str1="hello"
str2="world"
if [ "$str1" = "$str2" ]; then
echo "$str1 = $str2 : str1 等于 str2"
else
echo "$str1 = $str2 : str1 不等于 str2"
fi
# 文件测试
if [ -f /etc/passwd ]; then
echo "/etc/passwd 是普通文件"
fi
# 组合条件
if [ $a -lt 100 -a $b -gt 15 ]; then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
fi
掌握这些关系运算符是编写有效shell脚本的基础,它们使得脚本能够根据不同的条件执行不同的操作。