如何返回主菜单

如何返回主菜单

大家好,我是 Bash 脚本的新手,请求您的帮助。我正在尝试循环子菜单以返回到 Glassfish 中的主菜单。我正在使用 if 语句。

我希望我的脚本返回主菜单

#!/bin/bash
asadmin=/glassfish/bin/asadmin

echo "This is a console"
echo
echo "1. List Domains"
echo
echo "2. Start Domain"
echo
echo "3. Stop Domain"
echo
echo
echo "Choice:"
read answer
if [ $answer == '1' ]
then
$asadmin list-domains
fi
if [ $answer == '2' ]
then
echo "domain1"
echo "domain2"
read startdomainanswer
$asadmin start-domain $startdomainanswer
fi
if [ $answer == '3' ]
then
echo "domain1"
echo "domain2"
read stopdomainanswer
$asadmin stop-domain $stopdomainanswer
fi

答案1

您目前有循环,甚至不是任何类型的循环。

您的脚本运行,在选择命令处等待您,然后在最后退出。错觉循环的创建方式是递归再次调用 asadmin,在选择命令处等待您,然后自行在末尾退出。

我的第一个建议是在脚本中添加一个“退出”选项,然后添加一个 while 循环来不断运行,要求执行某项操作,直到您选择该“退出”选项。

echo "This is a console"
while [ 1 ] 
do
   echo "Choice:"
   read answer
   case answer in 
   1 ) 
      . . . 
   2 ) 
      . . . 
   x ) 
      exit 
      ;;
   esac
done

我的第二建议(我过去也这样做过)将操作与“菜单”脚本完全分开。从 [菜单] 中读取选项文件并简单地将您正在读取的文件的名称更改为在菜单之间“移动”。

例如,使用这些“菜单”文件:

[main.menu]
1:List Domains:asadmin list-domains
2:Start Domain:@start
3:Stop Domain:@stop
x:Exit:EXIT

[start.menu]
1:Domain 1:asdamin start-domain Domain1
2:Domain 2:asdamin start-domain Domain2
x:Return:@main

[stop.menu]
1:Domain 1:asdamin stop-domain Domain1
2:Domain 2:asdamin stop-domain Domain2
x:Return:@main

您可以创建如下脚本:

[asmenu.bash]
$! /bin/bash 

$MENU_FILE="${1:-main}.menu"

while [ 1 ] 
do 
   echo "${MENU_FILE}"
   echo " "

   # Print Menu items - Choice number and description 
   awk -F':' '{print $1, $2}' "${MENU_FILE}"

   echo " " 
   echo "Choice:" 
   read CHOICE 

   # Extract the third element (command or menu name)  
   ACTION=$( awk -F':' '/^'${CHOICE}':/' {print $3}' "${MENU_FILE}" )

   if [ "EXIT" = "${ACTION}" ] ; then 
      exit ' End the menu Script 
   fi 

   if [ "${ACTION}" =~ ^@ ] ; then 
      # Leading at symbol implies a menu name
      MENU_FILE="${ACTION:1}.menu"
   else
      # Otherwise it's a command to execute 
      ${ACTION}
   fi 
done 

哪一个(如果我写得正确的话)应该做这样的事情,比如说,启动你的第二个域:

/* Start of run */ 
main.menu

1    List Domains
2    Start Domain
3    Stop Domain
x    Exit

Choice: 2

start.menu

1    Domain 1
2    Domain 2
x    Return

Choice: 2

/* execution of asadmin start-domain Domain2 */ 

start.menu

1    Domain 1
2    Domain 2
x    Return

Choice: x 

main.menu

1    List Domains
2    Start Domain
3    Stop Domain
x     Exit

Choice: x 
/* end of run */ 

相关内容