在编写 Shell 脚本时,参数的校验和状态的判断是保证脚本健壮性的关键。很多时候我们只关注了逻辑实现,却忽略了输入参数的合法性检查。
参数个数的判断
Shell 脚本中有一个特殊的变量 $#,它表示传递给脚本或函数的参数总数。比如在执行 ./script.sh arg1 时,$# 的值就是 1。如果我们希望脚本必须接收且仅接收一个参数,就可以用如下语句进行校验:
if [ $# -ne 1 ]; then
echo "Usage: $0 <arg>"
exit 1
fi
这里的 -ne 代表'不等于'(Not Equal)。如果参数个数不是 1,脚本就会进入错误处理流程。
常见的整数比较操作符
除了判断参数个数,脚本中经常需要对数字进行比较。以下是常用的比较符号,注意方括号内需要保留空格:
| 操作符 | 含义 | 示例 |
|---|---|---|
-eq | 等于 | if [ "$a" -eq "$b" ] |
-ne | 不等于 | if [ "$a" -ne "$b" ] |
-gt | 大于 | if [ "$a" -gt "$b" ] |
-ge | 大于等于 | if [ "$a" -ge "$b" ] |
-lt | 小于 | if [ "$a" -lt "$b" ] |
-le | 小于等于 | if [ "$a" -le "$b" ] |
对于更复杂的比较,也可以使用双括号结构,支持 <、> 等符号:
(( a < b ))
(( a >= b ))
退出状态码
最后别忘了 $? 这个变量。它记录了上一个命令执行的退出状态。通常 0 表示成功,任何非 0 值都意味着某种程度的失败。在编写自动化任务时,利用 $? 可以方便地判断前一步骤是否完成,从而决定后续流程。

