我想做点什么...... 如果标记在80-100之间,它将显示A + 如果标记在70-79之间,它将显示A. 等
我想用“esac中的case”而不是if-elif-fi
来做但是我如何做
的复杂表达echo “enter mark”
read mark
case $mark in
(( mark>=80 && mark<=100 ))) echo “A+”
..
..
..
esac
我尝试过这个。 if-elif-fi很容易,但我应该在'case'中做些什么
谢谢。
答案 0 :(得分:3)
你没有指定shell,所以让我插上zsh
:
#!/bin/zsh
echo “enter mark”
read mark
case $mark in
<80-100>) echo "A+" ;;
<70-79>) echo "A" ;;
...
esac
也就是说,POSIX case
语句(以及大多数shell中的case
语句)适用于匹配文本模式,而不是算术比较。 可以使用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
答案 1 :(得分:1)
如果条件更容易使用
if [[ ${mark} -ge 80 && ${mark} -le 100 ]]; then
echo "A+"
fi
但是如果你仍然需要案例,那么你需要指定一个模式
case ${mark} in
8[0-9]|9[0-9]|100)
echo "A+"
esac
答案 2 :(得分:0)
在常规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
表达式的前导括号是可选的。