在Linux Shell脚本编程中,关系运算符的嵌套使用是实现复杂条件判断的重要手段。下面我将详细介绍如何在Shell脚本中嵌套使用关系运算符。
首先回顾一下Shell中的基本关系运算符:
-eq
:等于-ne
:不等于-gt
:大于-ge
:大于等于-lt
:小于-le
:小于等于=
:等于!=
:不等于-z
:字符串为空-n
:字符串非空-e
:文件存在-f
:是普通文件-d
:是目录-r
:可读-w
:可写-x
:可执行if [ $a -gt 10 ] && [ $b -lt 20 ]; then
echo "a大于10且b小于20"
fi
if [[ $a -gt 10 && $b -lt 20 ]]; then
echo "a大于10且b小于20"
fi
if [ $a -gt 10 -a $b -lt 20 ]; then
echo "a大于10且b小于20"
fi
if [[ ($age -gt 18 && $age -lt 60) || $status == "admin" ]]; then
echo "允许访问"
fi
if [[ -f "/var/log/app.log" && (-r "/var/log/app.log" || $UID -eq 0) ]]; then
echo "文件存在且可读,或者是root用户"
fi
if [[ ($score -ge 90 && $score -le 100) ]]; then
grade="A"
elif [[ ($score -ge 80 && $score -lt 90) ]]; then
grade="B"
else
grade="C"
fi
[ ]
和[[ ]]
中,运算符和操作数之间必须有空格[ ]
中使用=
,在[[ ]]
中可以使用==
[[ ]]
支持通配符模式匹配,如[[ $file == *.txt ]]
()
来明确优先级bc
命令或awk
if [[ $(date +%H) -gt 9 && $(date +%H) -lt 17 ]]; then
echo "工作时间"
fi
case "$file" in
*.txt|*.doc)
if [[ -f "$file" && -r "$file" ]]; then
echo "可读文本文件"
fi
;;
*.jpg|*.png)
echo "图片文件"
;;
*)
echo "其他文件"
;;
esac
通过合理嵌套关系运算符,可以构建出强大的条件判断逻辑,使Shell脚本更加灵活和健壮。