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

Ubuntu虚拟机Bash脚本:用循环提取三位数的第二位数字

问题描述

给定一个三位数,用Shell Bash的循环实现计算该数字的第二位(十位)数值。示例:输入456,输出5。

当前编写的代码存在问题,请修改使其正常运行,且必须使用循环实现,禁止使用字符串截取(如${num:1:1})的方法。

原代码:

read -r -p "enter the number" num

while (( $num > 0 )) ; do
        digit = "$((num % 10))"
        num ="$(( num / 10 ))"
        printf "num=%d digit=%d\n" "${num}" "${digit}"
done
问题分析与修改方案
  1. 变量赋值语法错误:Bash中变量赋值时,=两边不能有空格,原代码里digit = ...和num = ...的写法会触发语法报错,必须删除空格。
  2. 逻辑调整:我们需要的是十位数字,对应循环两次后得到的digit(第一次取个位,第二次取十位),可以通过计数器控制循环次数,或通过数值范围判断实现目标。

修改后的代码(两种可选实现)

方法一:计数器控制循环次数

read -r -p "请输入一个三位数: " num
count=0
target_digit=0

while (( num > 0 && count < 2 )); do
    target_digit=$((num % 10))
    num=$((num / 10))
    ((count++))
done

echo "该数字的第二位数值是: $target_digit"

方法二:数值范围判断(适用于确保输入为三位数的场景)

read -r -p "请输入一个三位数: " num

while (( num >= 100 )); do
    num=$((num / 10))
done
target_digit=$((num % 10))

echo "该数字的第二位数值是: $target_digit"
代码说明
  • 方法一通过计数器count限制循环执行2次,第一次获取个位数字,第二次获取十位数字,最终target_digit即为所求结果。
  • 方法二利用三位数除以10后得到两位数(如456→45),再对10取余得到十位数字,while循环仅执行一次,符合循环实现的要求。
  • 两种方法均修复了原代码的赋值空格问题,确保语法合法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:50:27