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
相关产品推荐
相关产品推荐

