微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果在 While 循环中如何正确设置

如何解决如果在 While 循环中如何正确设置

稍后我将把其余的功能添加到程序中,它仍处于早期阶段,但由于某种原因,我似乎无法退出 while 循环,即使 if 语句在其中并在菜单。这是目前的代码

continue="true"

#while loop to keep the code running till the user inputs Q
while [ $continue = "true" ] 

#loop start
do
        #clearing screen before showing the menu
        clear
        echo "A to Create a user account"
        echo "B to Delete a user account"
        echo "C to Change Supplementary Group for a user account"
        echo "D to Create a user account"
        echo "E to Delete a user account"
        echo "F to Change Supplementary Group for a user account"
        echo "Q to Quit"
        read -p "What would you like to do?:" choice

        #Test to end the program
        if [ $choice = 'Q' ] || [ $choice = 'q']
                then
                $continue="false"
        fi
#loop end
done```

解决方法

作为 pointed out by Gordon,您需要 continue="false" 而不是 $continue="false"

另外,我建议使用 if [ "$choice" = 'Q' ] || [ "$choice" = 'q' ],这样如果用户点击 CR 并且没有输入任何内容,您的脚本就不会中断。 (另请注意,该语句中最后一个 ] 前需要一个空格。)

,

尽管注释中已经突出显示了语法错误,但我建议使用 continue 完全避免使用 break 变量。您还可以使用正则表达式组合这两项检查。像这样

while true; do
    read -p "What would you like to do?: " choice
    if [[ "$choice" =~ [Q|q] ]]; then
        break
    fi
done

尽管当我查看您问题中的 echo 语句时,您似乎最好完全避免使用 if,而是使用 case 语句

while true; do 
    read -p "What would you like to do?: " choice
    case "$choice" in
        q|Q) break 
            ;; 
        a|A) echo "Creating a user account"
            ;;
        #This catches anything else
        *) echo "unknown option"
            ;; 
    esac 
done

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。