我正在尝试从数组中读取脚本以在无效的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
}
现在,只要选择了无效选项,函数就会调用它自己。有更好的方法吗?