2017-04-11 11 views
0

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 
+0

ループソリューションについてはこちらhttp://stackoverflow.com/a/7948533/402322 – ceving

+0

すべてのオプションに引数があるので、スペースをテストすることでループから抜け出すことができました。 while [[$ 1!= ""]];を使用しています。 do – nlew82

答えて

0

私は、この例が参考になることができると思います。

$ cat example.sh 
#! /bin/sh 
while getopts "h?o:" opt; do             
    case "$opt" in                
    h|\?)                   
     echo help actions               
     ;;                  
    o)                   
     echo $OPTARG               
     ;;                  
    esac                   
done 

あなたがして、あなたのスクリプトを呼び出すことができます。

$ ./example.sh -h 

h)ケースを実行するか、実行することができます

$ ./example.sh -o argument 

o)caseを実行し、変数OPTARGの "argument"を受け取ります。

getoptsが動作しません長いオプションを処理するための
+0

私がしたいときはどうしますか./example.sh -o引数-h引数 – nlew82

+0

これは、 '--bind_dn'のようなGNUスタイルの長いオプションを使用する質問に載せられた例では機能しません。 '-h'(' --help'ではなく)のような短いオプション付きです – odradek

+0

'o'文字に続く文字列パターンの ":"のために、-o引数を使用できます。必要なすべてのパラメータに ":"を使用できます。 – aicastell

0

、することができます回避策として:

#!/bin/bash 

for arg in "[email protected]"; do 
    shift 
    case "$arg" in 
     --hello) echo "$1" ;; 
     --bye) echo "$1" ;; 
     --help) echo "Help" ;; 
     *) echo "Option doesn't exist"; exit 1 ;; 
    esac 
done 

出力は次のようになります。

$ ./test_args.sh --hello "Hi, what's up?" --bye Goodbye! --help --hello Hi! 
Hi, what's up? 
Goodbye! 
Help 
Hi! 

唯一の注意点は、あなたが持っている引数を引用しなければならないということですそれらの間のスペース。

関連する問題