这个Bash脚本菜单有什么问题?
我已经厌倦了键入长命令来完成简单的事情,因此我编写了这个简短的Bash菜单脚本来加快速度:这个Bash脚本菜单有什么问题?,bash,Bash,我已经厌倦了键入长命令来完成简单的事情,因此我编写了这个简短的Bash菜单脚本来加快速度: #!/usr/bin/env bash PS3="Nginx? " options=("start", "stop", "status", "exit") select opt in "${options[@]}" do case $opt in "start") sudo service nginx start ;;
#!/usr/bin/env bash
PS3="Nginx? "
options=("start", "stop", "status", "exit")
select opt in "${options[@]}"
do
case $opt in
"start")
sudo service nginx start
;;
"stop")
sudo service nginx stop
;;
"status")
sudo service nginx status
;;
"exit")
echo "Exiting"
exit 1
;;
*) echo "Invalid selection";;
esac
done
它正确地显示了菜单:
1) start
2) stop
3) status
4) exit
但只有选项4“退出”才能正常工作。当我点击1、2或3时,我会得到“无效选择”。我是否输入了错误的sudo命令?谢谢。此代码显示的实际菜单不是您在问题中给出的菜单,而是:
1) start,
2) stop,
3) status,
4) exit
这种差异——前三项末尾的逗号——很有启发性
这是一个数组语法声明问题。去掉逗号:
options=( "start" "stop" "status" "exit" )
…顺便说一下,由于您的内容都是单字文字,没有全局字符,因此引号没有任何作用;同样正确的做法是写:
options=( start stop status exit )
原始代码不接受
start
,而是接受start,
;不是stop
,而是stop,
此代码显示的实际菜单不是您在问题中给出的菜单,而是:
1) start,
2) stop,
3) status,
4) exit
这种差异——前三项末尾的逗号——很有启发性
这是一个数组语法声明问题。去掉逗号:
options=( "start" "stop" "status" "exit" )
…顺便说一下,由于您的内容都是单字文字,没有全局字符,因此引号没有任何作用;同样正确的做法是写:
options=( start stop status exit )
原始代码不接受
start
,而是接受start,
;不是stop
,而是stop,
顺便说一句,更典型的是只运行yourscript start
,或者yourscript start
,&c.——读取要在命令行之外执行的操作,而不是从标准输入。这将使您的代码更易于从脚本中使用,并意味着它可以仅用这一行(在shebang之后)实现:sudo服务nginx“$@”
“使用空格而不是逗号来分隔数组元素。”--在脚本上运行时,更典型的做法是只运行yourscript start
,或您的脚本开始
,&c.——读取要在命令行之外执行的操作,而不是从标准输入。这将使您的代码更易于从脚本中使用,并且意味着它可以仅使用以下一行(在shebang之后)来实现:sudo service nginx“$@”
“使用空格而不是逗号来分隔数组元素。”--在您的脚本上运行时。谢谢。我没看到,谢谢。我没看到。