【问题标题】:Return to previous commands in bash script?返回到 bash 脚本中的先前命令?
【发布时间】:2017-07-12 07:27:50
【问题描述】:

我正在尝试在我的 bash 脚本中实现一个 prev 选项以返回到之前的“菜单”,以及在没有为 @987654323 设置变量时脚本再次询问用户输入的方法@。

这是我的 bash 脚本:

#!/bin/bash
#Menu() {
  for (( ; ; ))
  do
  beginORload=
  echo "Choose option:"
  echo "1 - Begin"
  echo "2 - Load"
  read -p "?" beginORload
#}
#Begin() {
if [ "$beginORload" -eq "1" ]
  then
  clear
  for (( ; ; ))
  do
  echo "Beginning. What is your name?"
  read -p "?" name
  #If "prev" specified, go back to #Menu()
  if [ "$name" -eq "prev" ]
    then
    Menu
  fi
  #If nothing specified, return to name input
  if [ -z ${name+x} ]
    then
    Begin
    else
    break
  fi
  echo "Hi $name !"
  done
fi
done

批处理中,我可以简单地做:

:menu
echo Choose option:
echo 1 - Begin
echo 2 - Load
[...]
:begin
[...]
if "%name%==prev" goto menu
if "%name%==" goto begin

问题是我到处都遇到错误,我不知道要输入什么才能让它工作

顺便说一句,我正在运行优胜美地。谢谢你

【问题讨论】:

标签: bash macos shell


【解决方案1】:

这样的事情很接近你的期望:

while [[ $answer -ne '3' ]];do
echo "Choose option:"
echo "1 - Begin"
echo "2 - Load"
echo "3 - Exit"
read -p "Enter Answer [1-2-3]:" answer
case "$answer" in
    1) while [[ "$nm" == '' ]];do read -p "What is your Name:" nm;done        # Keep asking for a name if the name is empty == ''
       if [[ $nm == "prev" ]];then nm=""; else echo "Hello $nm" && break; fi  # break command breaks the while wrapper loop 
       ;;
    2) echo 'Load' ;;
    3) echo 'exiting...' ;;                                          # Number 3 causes while to quit.
    *) echo "invalid selection - try again";;                        # Selection out of 1-2-3 , menu reloaded
esac                                                                 # case closing 
done                                                                 # while closing
echo "Bye Bye!"

一般来说,您可以将 case 选择包含在一个 while 循环中,该循环在某些情况下会中断(即,如果选择了选项 3 或给出了有效名称(不是空白 - 不是 prev)

PS1:在 bash 中,您将整数与 -eq-ne 等进行比较,但您将字符串与 ==!= 进行比较

PS2:查看以上代码online here

【讨论】:

  • 嗨。我离完成我的剧本太近了!我只是需要更多的帮助。我也在尝试添加更多菜单并拥有更多“上一个”选项。例如,我想要this(我把我的代码放在pastebin 上,这样看起来比在评论中更好。)^_^ 我该怎么做呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2015-04-27
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
相关资源
最近更新 更多