コマンドラインの Bash スクリプトのカール入力変数

コマンドラインの Bash スクリプトのカール入力変数

スクリプトが実行されたときにどの環境を渡すことができるかを望んでいます。同様に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-alpha1から多部屋)を使用できます。

以下を定義できます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配列にロードします。urlsread

#!/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+は現在広く利用可能です。

関連情報