这个Bash脚本菜单有什么问题?

时间:2016-09-29 20:59:26

标签: 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
            ;;
        "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 个答案:

答案 0 :(得分:3)

此代码显示的实际菜单不是您在问题中提供的,而是:

1) start,
2) stop,
3) status,
4) exit

这种差异 - 前三项末尾的逗号 - 很有启发性。

这是一个数组语法声明问题。拿出逗号:

options=( "start" "stop" "status" "exit" )
顺便说一下,因为你的内容都是没有全局字符的单字文字,所以引号不做任何事情;这写起来也是正确的:

options=( start stop status exit )

原始代码不接受startstart,;不是stop,而是stop,