Bash提供选项并传递变量供以后使用

时间:2014-03-07 00:32:42

标签: bash

尝试为安装程序的用户提供选项以选择“开发”或“稳定”。默认情况下,安装程序执行“git checkout 1.1.0”,但我将1.1.0转换为$ GIT_VERSION,并尝试在开头设置一个干净的方法。

尝试将$GIT_VERSION设置为master1.1.0,选项为1,2或3(3表示退出)。我有一个粗略的开始,我正在努力...

PS3='Do you want to install Lastest Stable or Latest Development: '
options=("Stable" "Development" "Quit")
select $GIT_VERSION in "${options[@]}"
do
    case $GIT_VERSION in
        "Stable")
            $GIT_VERSION=1.1.0 
            echo "Installing 1.1.0..."
            ;;
        "Development")
            $GIT_VERSION=master
            echo "Installing latest development version..."
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done
在同一脚本中安装和配置依赖项后,

选项将在后面用作git checkout $GIT_VERSION

这可能是一个更好的解决方案......

PS3="<b>Latest Stable</b> recommended for production servers
<b>Development Snapshot</b> intended for testing purposes

What version to you wish to install: "

select option in Latest\ Stable Development\ Snapshot Quit
do
    case $option in
        Latest\ Stable) 
            $GIT_VERSION=1.1.0
            echo "Install set to Latest Stable...";;
        Development\ Snapshot) 
            $GIT_VERSION=master
            echo "Install set to Development Snapshot...";;
        Quit)
            exit;
     esac
done

2 个答案:

答案 0 :(得分:2)

不要 * 在作业的LHS上使用$

$GIT_VERSION=1.1.0

GIT_VERSION=1.1.0

此外,'开发'只有3个e,而不是4个。


使用select

重新阅读GNU Bash Manual中的select后, 我认为这应该或多或少地有效:

STABLE_VERSION=1.1.0
GIT_VERSION=$STABLE_VERSION
PS3='Do you want to install Latest Stable or Latest Development: '
options=("Stable" "Development" "Quit")
select release in "${options[@]}"
do
    case "$release" in
        "Stable")
            GIT_VERSION=$STABLE_VERSION 
            echo "Installing stable version $STABLE_VERSION..."
            ;;
        "Development")
            GIT_VERSION=master
            echo "Installing latest development version..."
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done

这将控制select的变量与控制安装的变量分开。它还避免重复1.1.0,因此您可以在一个地方更改为1.1.1或1.2.0 - DRY原则的变体:不要重复自己。


* 可以在LHS上使用$,但您需要知道自己在做什么,而且更多的是错误而非正确。在当前的bashksh shell中,它基本上不起作用(找不到名称中带有等号的命令)。如果您发现了一个过时的Bourne shell,我相信(但现在无法证明)如果GIT_VERSION包含ABC_XYZ之类的字符串,那么$GIT_VERSION=1.1.0会将1.1.0分配给变量ABC_XYZ。这仍然不是预期的行为,这是带回家的主要观点。其余的是esoterica,你最好不要知道。

答案 1 :(得分:1)

bold=`tput bold`
normal=`tput sgr0`
PS3="
${bold}Latest Stable${normal} recommended for production servers
${bold}Development Snapshot${normal} intended for testing purposes

What version do you want to install: "
echo -e "\r\n"
select option in "Latest Stable" "Development Snapshot" "Quit"
do
  case $option in
    "Latest Stable") 
      GIT_VERSION=1.1.0
      echo "Install set to Latest Stable..."
      break;;
    "Development Snapshot") 
      GIT_VERSION=master
      echo "Install set to Development Snapshot..."
      break;;
    "Quit")
      exit;
    esac
done

在克隆分支

时,使用$GIT_VERSION在脚本中获取版本值