bashスクリプトに与えられたオプションの文字列を取得して、大文字と小文字を区別して変数に代入しようとしています。私はケースが条件付きだと信じています。オプションを介して大文字小文字のループを持ち、変数を割り当てる方法はありますか?私は何度か使っていて、他のものを繰り返しています。 print文はcase文の後には機能しません。オプションをbashケースで反復する
例:
runスクリプト: ./ping_ds_replication_setup --bind_dnネイト--bind_passwordパスワード--slave_ds_serversサーバー1サーバー2 server-name.troweprice.io --master_ds_server server3の--admin_uidネイト--admin_passwordパスワード
現在出力: ping_bind_dn:ネイト バインドパスワード:パスワード セカンダリサーバー:サーバー1 セカンダリサーバ:server2の セカンダリサーバ:server-name.troweprice.io マスターDSサーバー:server3の admin_uid:ネイト のadmin_password:パスワード
スクリプト:
while [ -n 1 ]; do
case "$1" in
--bind_dn)
ping_bind_dn=$2
printf "ping_bind_dn: $ping_bind_dn\n"
shift
;;
--bind_password)
bind_password=$2
printf "bind password: $bind_password\n"
shift
;;
--admin_uid)
admin_uid=$2
printf "admin_uid: $admin_uid\n"
shift
;;
--admin_password)
admin_password=$2
printf "admin_password: $admin_password\n"
shift
;;
--master_ds_server)
master_ds_server=$2
printf "master ds server: $master_ds_server\n"
shift
;;
--slave_ds_servers)
slave_raw_input=([email protected])
slave_switch_removed=${slave_raw_input[@]:1}
regex2=$(grep -Po '.*?(?=--)' <<< ${slave_switch_removed[@]})
secondary_ds_server=($(echo "${regex2}"|head -n 1))
for secondary_server in "${secondary_ds_server[@]}"; do
printf "secondary servers: $secondary_server \n"
done
shift
esac
shift
done
for secondary_server in "${secondary_ds_server[@]}"; do
printf "secondary servers outside case: $secondary_server \n"
done
ループソリューションについてはこちらhttp://stackoverflow.com/a/7948533/402322 – ceving
すべてのオプションに引数があるので、スペースをテストすることでループから抜け出すことができました。 while [[$ 1!= ""]];を使用しています。 do – nlew82