2016-04-26 7 views
1

私はこのcase文を作成しようとしています。私がやろうとしているのは、入力パラメータ$1を3つのオプションの1つにマッピングし、ホスト名にマップすることです。私の命令は失敗している。変数を値に割り当てるにはどうすればよいですか?これを行う最善の方法は何ですか?エイリアスを値にマップする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を試してみてください。あなたはこのようなあなたのcase文変更する必要があり

+0

ありがとうございました。 'getopts'を使った例がありますか? – noober

+2

@noober絶対に! [This](http://mywiki.wooledge.org/BashFAQ/035)はスタートするのに最適な場所です! ':)' –

-2

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

ここにはサブシェルの理由はありません。 – twalberg

関連する問題