2016-04-26 55 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