我试图让一个脚本在从数组中读取时重新循环无效的 case 语句。这与问题非常相似: Bash case statement restart on invalid input 但我似乎无法使代码与我的数组一起工作。我知道我可能需要在这里某处的“while”语句,但我不知道它应该去哪里。这是我的原始代码:
stop_services() {
for i in ${service_array[@]};
do
read -p "Stop ${i}: (Y/n) " choice
case "$choice" in
y|Y ) systemctl stop ${i}; get_status;;
n|N ) get_status;;
* ) echo "invalid option";;
esac
done
}
我想出了一个解决方案,但它似乎不是很优雅。通过创建另一个函数,我可以调用该函数作为* ) echo "invalid option";;
选择的一部分。
choice_function() {
read -p "Stop ${i}: (Y/n) " choice
case "$choice" in
y|Y ) systemctl stop ${i}; get_status;;
n|N ) get_status;;
* ) echo "invalid option"; choice_function;;
esac
}
stop_services() {
for i in ${service_array[@]};
do
choice_function
done
}
现在,只要选择了无效选项,该函数就会调用自身。有一个更好的方法吗?