首页 > 解决方案 > 如果条件避免每次在 bash 中写入 `-le 100`,我该如何组合这些 &&?

问题描述

我想写一个 bash 脚本,包含 5 个科目的分数,分数不能大于 100。如何避免-le 100每次都输入。

while true
do
echo "enter marks of 5 subjects"
read m1 m2 m3 m4 m5
if [ $m1 -le 100 ] && [ $m2 -le 100 ] && [ $m3 -le 100 ] && [ $m4 -le 100 ] && [ $m5 -le 100 ]
then
        break
else
 echo "marks cannot be more than 100"
fi
done

标签: bashshellif-statement

解决方案


我怎样才能避免每次都输入 -le 100 。

好吧,您可以输入其他内容:

test_lower_equal_100() { [ "$1" -le 100 ]; }
if test_lower_equal_100 "$m1" && test_lower_equal_100 "$m2" && test_lower_equal_100 "$m3" && test_lower_equal_100 "$m4" && test_lower_equal_100 "$m5"

您可以迭代变量名称:

for i in m1 m2 m3 m4 m5; do
    if [ "${!i}" -le 100 ]; then
         echo "mark $i is lower or equal to 100"
    fi
done

或循环值:

for i in "$m1" "$m2" "$m3" "$m4" "$m5"; do
   if [ "$i" -le 100 ]; then
         echo "value $i is lower or equal to 100"
   fi
done

我会保留代码原样,因为它既冗长又可读且可维护。我会引用变量,添加-rread使用 bash 算术扩展if ((m1 <= 100 && m2 <= 100 && m3 <= 100 && m4 <= 100 && m5 <= 100)); then


推荐阅读