スクリプトが実行されたときにどの環境を渡すことができるかを望んでいます。同様にscript.sh dev
($dev
適切なURLはスクリプトのcurlコマンドに入力されます)。
パススルーオプションで環境を印刷することも可能ですか?
#!/bin/bash
# Environment/URL
dev=myurl.myco.com
tst=myurl.myco.com
tst02=myurl.myco.com
tst03=myurl.myco.com
qa01=myurl.myco.com
request=`curl -L -k -H 'Content-Type:application/x-www-form-urlencoded' -H 'cache-control:no-cache' -X https://$tst/bla/bla/bla/bla 2>/dev/null`
答え1
Bashを使用しているので、連想配列(bash-4.0-alpha
1から多部屋)を使用できます。
以下を定義できますscript
。
#!/bin/bash
declare -A urls
urls[dev]=dev.example.com
urls[tst]=test.example.com
request="$(curl ... https://"${urls["$1"]}"/foo/bar ...)"
次のように呼び出します。
script dev
最初の位置パラメータ($1
)は、配列からURLを取得するためのキーとして使用されますurls
。
以下の(よりユーザーフレンドリーな)バリエーションでDopeGhotiが提案した、script
おそらく:
#!/bin/bash
declare -A urls
urls[dev]=dev.example.com
urls[tst]=test.example.com
select opt in "${!urls[@]}"; do
[ ! -z "$opt" ] && break
done
request="$(curl ... https://"${urls["$opt"]}"/foo/bar ...)"
これは、次のように呼び出されることを意味します。
script
このselect
コマンドは、ユーザーにアレイで定義されたキーのリストを提供し、有効urls
なキーが選択されていることを確認します。
最後に、問題を区別する方法として、URLをhereというプレーンテキストファイルに次のurlfile
形式で保存できます。
dev dev.example.com
tst test.example.com
そしてループを使って内容をscript
配列にロードします。urls
read
#!/bin/bash
declare -A urls
while read -r label url; do
urls["$label"]="$url"
done <urlfile
select opt in "${!urls[@]}"; do
[ ! -z "$opt" ] && break
done
request="$(curl ... https://"${urls["$opt"]}"/foo/bar ...)"
$(...)
注:コマンド代替構文(代わりに)を選択しました。` `
なぜなら必要ではなかったにもかかわらず一般的にもっと一般的な。
これで1犯罪2011年から。 Bash 4.0+は現在広く利用可能です。