スクリプトの特定の行を実行するためにbashスクリプトを起動したときにパラメータを渡す方法
たとえば( createfile.sh
):
#!/bin/bash
export CLIENT1_DIR="<path1>"
export CLIENT2_DIR="<path2>"
chef-solo -c solo.rb -j client1.json
chef-solo -c solo.rb -j client2.json
それから
$ ./createfile.sh client1
特定の行のみをclient1
実行し、「client2
特定の行のみを実行する必要がありますclient2
」に置き換えられます。
答え1
これには多くの解決策があります。これは:
#!/bin/bash
client="$1"
case "$client" in
"client1") export CLIENT1_DIR="<path1>" ;;
"client2") export CLIENT2_DIR="<path2>" ;;
*) printf 'Invalid client argument: %s\n' "$client" >&2
exit 1 ;;
esac
chef-solo -c solo.rb -j "$client".json
このclient
変数は、最初のコマンドライン引数の値を取得します。
ステートメントはcase
値を設定またはベースにしますCLIENT1_DIR
(CLIENT2_DIR
無効な値が使用されている場合はエラーメッセージで終了します)。
次に、chef-solo
コマンドラインで提供されている内容に対応するJSONファイルを使用して呼び出します。
答え2
関数には次の行があります。
#!/bin/bash
clientOne(){
## client1 specific lines
echo "one"
}
clientTwo(){
## client2 specific lines
echo "two"
}
case "$1" in
"client1")
clientOne
;;
"client2")
clientTwo
;;
*)
echo "Wrong option" >&2
;;
esac
## Common lines
echo foo