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