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
问题分析与修改方案
- 变量赋值语法错误:Bash中变量赋值时,
=两边不能有空格,原代码里digit = ...和num = ...的写法会触发语法报错,必须删除空格。 - 逻辑调整:我们需要的是十位数字,对应循环两次后得到的
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
相关产品推荐
相关产品推荐

