2016-04-26 34 views
1

我试图找出创建此case语句。我想要做的是映射我的输入参数$1,它必须是3个选项之一,然后映射到主机名。我的命令失败了。如何将我的变量赋值为值?做这个的最好方式是什么?如何正确创建用于将别名映射到值的case语句

执行:

./test.sh cluster1 

例子:

#!/bin/bash 
ENDPOINT="$1" 
SCH="$2" 

case $ENDPOINT in 
     "cluster1") $HOST="myhost1.abcde.us-west-1.amazonaws.com";; 
     "cluster2") $HOST="myhost2.abcde.us-west-1.amazonaws.com";; 
     "cluster3") $HOST="myhost3.abcde.us-west-1.amazonaws.com";; 
esac 

psql $HOST -U myuser -d $SCH -p 5439 << EOF 

得到的错误:

/test.sh: line 18: =myhost1.abcde.us-west-1.amazonaws.com: command not found 

回答

3

如果去掉$HOST变量,同时使分配它的工作。

#!/bin/bash 
ENDPOINT="$1" 
SCH="$2" 

case $ENDPOINT in 
     "cluster1") HOST="myhost1.abcde.us-west-1.amazonaws.com";; 
     "cluster2") HOST="myhost2.abcde.us-west-1.amazonaws.com";; 
     "cluster3") HOST="myhost3.abcde.us-west-1.amazonaws.com";; 
esac 

psql "$HOST" -U myuser -d "$SCH" -p 5439 << EOF 

也尝试使用getopts以获得更好的可伸缩性。

+0

谢谢。你有使用'getopts'的例子吗? – noober

+2

@noober绝对! [This](http://mywiki.wooledge.org/BashFAQ/035)是一个开始的好地方! ':)' –

-2

你应该改变你的case语句是这样的:

HOST=$(case $ENDPOINT in 
    "cluster1") echo "myhost1.abcde.us-west-1.amazonaws.com";; 
    "cluster2") echo "myhost2.abcde.us-west-1.amazonaws.com";; 
    "cluster3") echo "myhost3.abcde.us-west-1.amazonaws.com";; 
esac) 

现在不能测试,让我知道,如果它的工作原理。

+1

没有理由在这里的subshel​​l。 – twalberg