如何正确设置If in While循环



稍后我将把其余的功能添加到程序中——它仍处于早期阶段,但由于某种原因,即使if语句在其中和菜单下,我似乎也无法摆脱while循环。这是迄今为止的代码。

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```
正如Gordon所指出的,您需要continue="false"而不是$continue="false"

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

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

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

最新更新