0

我试图让一个脚本在从数组中读取时重新循环无效的 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
}

现在,只要选择了无效选项,该函数就会调用自身。有一个更好的方法吗?

4

0 回答 0