Linux 如何创建具有“退出并继续”选项的while do done脚本?

Linux 如何创建具有“退出并继续”选项的while do done脚本?,linux,bash,shell,Linux,Bash,Shell,我正在尝试找出如何在bash中创建while do done脚本,该脚本将允许我选择选项1-4,如果使用1-4,将允许我再次选择按“n”退出或按任意键继续。谢谢你的任何意见,我非常感谢 #!/bin/bash #while-do-done RED='\033[0;31m' NC='\033[0m' #options 1-4 have options, option 5-x is else command echo "Type one of the following:" echo "1 - w

我正在尝试找出如何在bash中创建while do done脚本,该脚本将允许我选择选项1-4,如果使用1-4,将允许我再次选择按“n”退出或按任意键继续。谢谢你的任何意见,我非常感谢

#!/bin/bash
#while-do-done
RED='\033[0;31m'
NC='\033[0m'

#options 1-4 have options, option 5-x is else command
echo "Type one of the following:"
echo "1 - whoami"
echo "2 - df"
echo "3 - date"
echo "4 - cal"
echo -n "select option:"

read option

while [ $option == "1" ]
 whoami

echo "Enter another command?"

echo "Press 'n' to exit. Any key to continue"

if [ $option == "n" ]
 then exit
fi

while [ $option == "2" ]
 df

while [ $option == "3" ]
 date

while [ $option == "4" ]
 cal

while [ $option == * ]
 printf "${RED} You made an invalid selection. Exiting.${NC}"

exit 0
我想这就是你想要的

#!/usr/bin/env bash

RED='\033[0;31m'
NC='\033[0m'

showmenu() {
  echo "Type one of the following:"
  echo " 1 - whoami"
  echo " 2 - df"
  echo " 3 - date"
  echo " 4 - cal"
}

# Your loop starts here.
while true; do

  showmenu    # This calls the function above.

  read -p "Enter selection: " option

  case "$option" in
    1) whoami ;;
    2) df ;;
    3) date ;;
    4) cal ;;
    *)
      echo "${RED}Invalid selection. Exiting.${NC}"
      break    # Quit the loop, resuming execution after "done"
      ;;
  esac

  read -p "Enter another command (y/n)?" cont

  case "$cont" in
    N*|n*) break ;;    # Quit the loop, resuming execution after "done"
    *) continue ;;     # Restart the loop. Not strictly necessary here,
                       # since there's nothing left to skip before "done".
  esac

done

echo "I quit."

顺便说一下,这个脚本的大部分不需要bash;您可以在大多数系统上使用
/bin/sh
运行它。

请先使用shellcheck.net修复更明显的错误。空格对shell很重要。那些
if
while
行上的
[
]
不是语法括号
[
是一个实际的命令。因此
[
]
在它们周围需要空格。@chepner“明显错误”到底是什么意思?@Etan所以“if[$option=n]”应该是“if[$option=n]”@Kris如果你像chepner建议的那样将代码放入shellcheck.net,你就会明白chepner的意思“明显的错误。”克里斯,在我看来,你似乎在试图使用<代码>而<代码>却好像是<代码>案例<代码>。在“元代码”中写出你想要的功能可能会很有用——也就是说,用通俗易懂的语言,可以用来更好地描述你真正想要做的事情。你提到“whiledo done”,但你没有在脚本中做“或做”。这正是我所要完成的。我不知道如何去创建一个循环。我看到了很多例子,但没有什么真正的点击。我过去做C++,我真的相信这比我更容易。我非常感谢帮助。C++相当于一个BASH。“语句将是一个“switch”语句。现在很多语言对于完全相同的语法来说都是不同的词汇表。请注意,如果我的答案中的循环条件是
true
(在“while”之后),您可以为
if
语句设置任何条件。例如,
while[$count-lt$limit];do
…您可以在shell中进行
人工测试
,以获得可用的测试样本。