Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个Bash脚本菜单有什么问题?_Bash - Fatal编程技术网

这个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 ;;

我已经厌倦了键入长命令来完成简单的事情,因此我编写了这个简短的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
            ;;
        "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“$@”
“使用空格而不是逗号来分隔数组元素。”--在您的脚本上运行时。谢谢。我没看到,谢谢。我没看到。