你好,我是bash脚本的新手,请求您的帮助。我正试图循环我的子菜单,回到玻璃鱼的主菜单。我在用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
发布于 2019-10-10 03:59:14
您目前没有循环,甚至没有任何类型的循环。
您的脚本运行,在script命令下等待您,然后在结束时退出。循环的幻象是由对asadmin的递归调用创建的,它还会在itself命令下等待您,然后在结束时退出。
我的第一个建议是在脚本中添加一个"exit“选项,然后添加一个while循环来不断地循环,要求做些什么,直到选择"exit”选项为止。
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 */
https://serverfault.com/questions/987467
复制