You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux脚本执行报错‘-gt: unary operator expected’求助

解决Bash脚本"-gt: unary operator expected"错误

错误原因

你遇到的错误是因为脚本里的$num变量为空导致的。脚本中num=$5表示取第五个位置参数,如果运行脚本时传入的参数数量不足5个,$5就会是空值。此时if [ $num -gt 10 ]会被解析成if [ -gt 10 ],-gt作为二元运算符需要左右两边都有值,空值导致它被当成一元运算符,从而触发报错。

解决方法

方法1:确保传入足够的参数

运行脚本时必须传入至少5个参数,第五个参数为你要处理的数字。比如:

./your_script.sh arg1 arg2 arg3 arg4 12

这里第五个参数12会被赋值给num,脚本就能正常执行。

方法2:给变量加引号,避免空值解析异常

修改条件判断语句,给$num加上双引号,即使变量为空,语法也能保持正确(后续可再处理空值情况):

num=$5

if [ "$num" -gt 10 ]; then
    echo "greater than 10"
else
    echo "lesser than 10"
fi

方法3:增加参数检查,提前处理空值

在判断数字大小前,先检查第五个参数是否存在,避免空值进入判断逻辑:

num=$5

# 检查第五个参数是否为空
if [ -z "$num" ]; then
    echo "错误:请传入至少5个参数,且第五个参数为数字"
    exit 1
fi

# 检查参数是否为有效数字(可选,增强鲁棒性)
if ! [[ "$num" =~ ^[0-9]+$ ]]; then
    echo "错误:第五个参数必须是正整数"
    exit 1
fi

if [ "$num" -gt 10 ]; then
    echo "greater than 10"
else
    echo "lesser than 10"
fi

方法4:使用算术表达式语法(更简洁健壮)

Bash支持(( ))算术表达式写法,这种方式不需要引号,对空值的处理也更直观:

num=$5

if (( num > 10 )); then
    echo "greater than 10"
else
    echo "lesser than 10"
fi

同样,建议搭配参数检查,避免因空值或非数字参数导致其他错误。

内容的提问来源于stack exchange,提问作者Srii Chandana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:17:03