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

Shell统计5位数第2位数字出现次数报unary operator expected错误如何解决

错误原因及代码问题梳理

你遇到的[: -lt: unary operator expected报错核心原因是循环变量未初始化,除此之外代码还有3处明显不符合要求的问题:

  • 循环变量i没有提前赋值,第一次执行while [ $i -lt 5 ]时$i为空值,导致方括号判断语法不完整触发报错
  • 循环体内没有对i做自增操作,运行会进入无限死循环
  • 计数变量赋值语法错误:$s=$(( $s+1 ))不符合Shell语法规范,变量赋值时左侧变量名不需要加$前缀
  • 未匹配需求:原需求要求读取用户输入的5位数字,当前代码中num是硬编码的固定值,也没有对输入合法性做校验
修复后的完整代码
#!/bin/bash
# 读取用户输入并校验是否为5位数字
read -p "请输入5位数字:" num
if [[ ! $num =~ ^[0-9]{5}$ ]]; then
    echo "输入非法,请输入5位纯数字"
    exit 1
fi

# 提取左数第2位的数字
n=3
t11=$((10**$n))
t1=$(($num / $t11))
x=10
t2=$(($t1 / $x))
t2=$(($t2 * $x))
target_digit=$(($t1 - $t2))
echo "待统计的第2位数字为:$target_digit"

count=0
i=0
while [ $i -lt 5 ]
do
    current_n=$i
    t11=$((10**$current_n))
    t1=$(($num / $t11))
    t2=$(($t1 / $x))
    t2=$(($t2 * $x))
    current_digit=$(($t1 - $t2))
    if [ $current_digit -eq $target_digit ]
    then
        count=$(( count+1 ))
    fi
    i=$((i+1))
done
echo "该数字的出现次数为:$count"
验证示例

输入16386时输出结果为:

待统计的第2位数字为:6
该数字的出现次数为:1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:39:02