我怎样才能将这些 &&, if 条件结合起来以避免每次在 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

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

最新更新