我想做类似的事情.. 如果标记在 80-100 之间,它将显示 A+ 如果标记在 70-79 之间,它将显示 A 等
我想用“case in esac”而不是 if-elif-fi
但是我该如何做复杂的表达以防万一
echo “enter mark”
read mark
case $mark in
(( mark>=80 && mark<=100 ))) echo “A+”
..
..
..
esac
我试过这个。使用 if-elif-fi 很容易,但在“案例”中我应该做什么谢谢。
您没有指定外壳,所以让我插入zsh:
#!/bin/zsh
echo “enter mark”
read mark
case $mark in
<80-100>) echo "A+" ;;
<70-79>) echo "A" ;;
...
esac
也就是说,POSIXcase语句(以及case大多数 shell 中的语句)旨在匹配文本模式,而不是算术比较。您可以使用case语句,但它可能会变得丑陋。
case $mark in
[89]?|100) echo "A+" ;;
7?) echo "A" ;;
...
esac
在这种情况下,情况还不错,因为您没有像 那样65-74的范围,但是if声明会更好。
if (( mark >=80 && mark <=100 )); then
echo "A+"
elif (( mark >=70 )); then
echo "A"
elif ...; then
...
else
...
fi
如果条件更容易使用
if [[ ${mark} -ge 80 && ${mark} -le 100 ]]; then
echo "A+"
fi
但是如果你仍然需要大小写,那么你需要指定一个模式
case ${mark} in
8[0-9]|9[0-9]|100)
echo "A+"
esac
在常规的 POSIX-ish shell 中:
echo "enter mark"
read mark
case "$mark" in
([89][0-9]|100) echo "A+";;
(7[0-9]) echo "Grade";;
(6[0-9]) echo "Grade";;
...
esac
表达式的前导左括号是可选的。