;;
我在这个包含嵌套的 bash 脚本中是否有足够的(或者可能太多)终止case
符?
case "$1" in
OK)
# Nothing needs done
echo -n "OK:1" ;;
CRITICAL)
case "$2" in
SOFT)
case "$3" in
1|2)
soft_reset_pool.sh ;;
esac ;;
HARD)
case "$3" in
1|2)
hard_reset_pool.sh ;;
3|4)
hard_reset_service ;;
esac ;;
esac ;;
esac
我已经好几年没有愤怒地进行过任何攻击了。
答案1
如果您在 s 上使用合理的缩进,则更容易跟踪;;
。
case "$1" in
OK)
# Nothing needs done
echo -n "OK:1"
;;
CRITICAL)
case "$2" in
SOFT)
case "$3" in
1|2)
soft_reset_pool.sh
;;
esac
;;
HARD)
case "$3" in
1|2)
hard_reset_pool.sh
;;
3|4)
hard_reset_service
;;
esac
;;
esac
;;
esac
他们每一个都很匹配case
标签)
有一个终止的;;
也就是说,有时将所有内容折叠到非嵌套中会更容易和/或更清晰case
:
case "$1:$2:$3" in
OK:*)
# Nothing needs done
echo -n "OK:1"
;;
CRITICAL:SOFT:[12])
soft_reset_pool.sh
;;
CRITICAL:HARD:[12])
hard_reset_pool.sh
;;
CRITICAL:HARD:[34])
hard_reset_service
;;
esac
答案2
如果您必须处理多个模式字符串:
假设 $3 是一个字符串。
...
CRITICAL:HARD:@("A"|"B"|"C"))
...
在 Bash 中,您需要在脚本中添加以下内容:
shopt -s extglob
谢谢豪克拉格给小费。