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

如何在Bash中检查输入数量是否超过5个?实现输入数量限制功能

解决Bash脚本中输入数量检查及分数验证的问题

我来帮你完善这个脚本,既实现输入数量不超过5个的检查,又保留原有的分数不超过100的验证逻辑,还顺便解决了原脚本可能遇到的非数字输入报错问题~

修改后的完整脚本

while true
do
    echo "enter marks of up to 5 subjects (space-separated)"
    # 将所有输入读取到数组中,方便统计输入数量和后续遍历验证
    read -a marks
    
    # 第一步:检查输入数量是否超过5个
    if [ ${#marks[@]} -gt 5 ]; then
        echo "you have entered more than 5 inputs"
        continue  # 跳过后续检查,重新要求输入
    fi
    
    # 第二步:验证每个分数是否合法(不超过100,且是数字)
    is_valid=true
    for mark in "${marks[@]}"; do
        # 先检查输入是否为正整数,避免非数字导致脚本报错
        if ! [[ "$mark" =~ ^[0-9]+$ ]]; then
            echo "invalid input: please enter only numeric marks"
            is_valid=false
            break
        fi
        # 检查分数是否超过100
        if [ "$mark" -gt 100 ]; then
            echo "marks cannot be more than 100"
            is_valid=false
            break
        fi
    done
    
    # 如果所有验证都通过,退出循环
    if [ "$is_valid" = true ]; then
        # 可选:将数组内容赋值回原变量m1-m5(如果后续逻辑需要)
        m1=${marks[0]:-0}
        m2=${marks[1]:-0}
        m3=${marks[2]:-0}
        m4=${marks[3]:-0}
        m5=${marks[4]:-0}
        break
    fi
done

# 示例:输出最终输入的分数
echo "Valid marks entered: ${marks[*]}"

关键改进说明

  • 输入数量检查:用read -a marks把所有空格分隔的输入存入数组,通过${#marks[@]}获取数组元素个数,能准确判断是否超过5个输入。原脚本中如果输入超过5个,最后一个变量会接收剩余所有内容,既无法正确统计数量,还会导致后续数字验证报错。
  • 增强的合法性验证:新增了非数字输入的检查(通过正则表达式^[0-9]+$判断是否为正整数),避免用户输入字母或符号时脚本崩溃。
  • 灵活的变量兼容:如果后续逻辑需要使用m1到m5这些单独变量,脚本里用${marks[N]:-0}的方式赋值,确保即使输入不足5个,变量也有默认值0(你可以根据需求调整默认值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:07:18