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

如何在Bash脚本中合并条件判断,避免重复书写-le 100

如何简化Bash脚本中重复的成绩范围判断?

我来帮你解决这个重复写判断条件的问题,这里有两种实用的方案可以避免每次都输入-le 100:

方案一:使用数组遍历判断(推荐,扩展性更强)

把输入的所有成绩存入数组,然后通过循环遍历数组中的每个元素进行校验,这样不管是5门课还是更多课程,都不用修改判断逻辑的结构:

while true
do
    echo "enter marks of 5 subjects"
    read -a marks  # 将输入的成绩批量读入数组marks
    local valid=true

    # 遍历数组中的每一个成绩
    for mark in "${marks[@]}"
    do
        # 只要有一个成绩超过100,就标记为无效并跳出循环
        if ! [ "$mark" -le 100 ]
        then
            valid=false
            break
        fi
    done

    if "$valid"
    then
        # 如果需要单独使用单门课成绩,可以通过索引获取:m1=${marks[0]}, m2=${marks[1]}...
        break
    else
        echo "marks cannot be more than 100"
    fi
done

这种方式的优势很明显:如果之后需要增加课程数量,只需要修改提示文本,判断逻辑完全不用动,非常灵活。

方案二:封装判断逻辑到函数中

如果不想改变原有变量的结构,可以把成绩校验的逻辑封装成一个函数,每次调用函数来完成判断,这样后续要修改校验规则(比如改成不能超过90),只需要修改函数内部即可:

# 定义一个校验成绩的函数,参数是单个成绩
is_valid_mark() {
    local input_mark="$1"
    [ "$input_mark" -le 100 ]
}

while true
do
    echo "enter marks of 5 subjects"
    read m1 m2 m3 m4 m5

    if is_valid_mark "$m1" && is_valid_mark "$m2" && is_valid_mark "$m3" && is_valid_mark "$m4" && is_valid_mark "$m5"
    then
        break
    else
        echo "marks cannot be more than 100"
    fi
done

这个方案更贴合你原有脚本的变量结构,只是把重复的判断逻辑抽离到了函数里,可读性和维护性都有所提升。

内容的提问来源于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:24