bash中的条件如何合并这些&&?

时间:2019-09-28 21:29:23

标签: bash shell if-statement

我想编写一个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

1 个答案:

答案 0 :(得分:2)

  

如何避免每次都输入-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

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