2017-12-05 4 views
0

私はメインリストを読み込むスクリプトをwhileループを使ってList Aと呼んでいます。bashスクリプト - 複数の条件を処理するための効果的なcase文を書く方法

一覧A:

east-1-1 
east-1-3 
east-1-7 
west-1-10 
south-1-2 

caseで私caseにし、それらの項目ごとに記載されているとおり:私がやりたい何

east-1-1 
east-1-2 
east-1-3 
east-1-4 
east-1-5 
east-1-6 
east-1-7 
west-1-1 
west-1-10 
south-1-1 
south-1-2 
north-1-1 

は、このリストに対してそれをチェックしています*

case "${cluster}" in 
    east-1-1) 
     echo "${cluster}:${getCount} * ";; 
    east-1-3) 
     echo "${cluster}:${getCount} * ";; 
    east-1-7) 
     echo "${cluster}:${getCount} * ";; 
    west-1-10) 
     echo "${cluster}:${getCount} * ";; 
    south-1-2) 
     echo "${cluster}:${getCount} * ";; 
    esac 

私はこれを関数内で行い、caseのステートメントを使用していますが、これは間違っていると思います。より良い方法があるかどうかを知りたいですか? if-then-elseを使用する必要がありますか? caseでこれを行うことはできますか?

もし私がこのアプローチについて助けを得たり、これを書く良い方法があれば教えてください。進行中

CODE:

#!/usr/local/bin/bash 

MAP=./.clusterinfo 
if ! [ -f "$MAP" ]; then 
     echo "Cluster Map not found." 
     exit 1 
fi 

while IFS='' read -r cluster; do 
#Function runQuery 
runQuery() 
{ 
    getCount=$(PGPASSWORD=Abc123Pa55word psql -h myapp-"${cluster}".foobar.com -U foo -d dev -p 5439 -t -c "select count(*) from pg_database;") 

    case "${cluster}" in 
    east-1-1) 
     echo "${cluster}:${getCount} * ";; 
    east-1-3) 
     echo "${cluster}:${getCount} * ";; 
    east-1-7) 
     echo "${cluster}:${getCount} * ";; 
    west-1-10) 
     echo "${cluster}:${getCount} * ";; 
    south-1-2) 
     echo "${cluster}:${getCount} * ";; 
    esac 
    echo "${cluster}:${getCount}" 
} 

#Execute 
runQuery 

done < "$MAP" 

電流出力:

east-1-1: 50 * 
east-1-1: 50 
east-1-2:  8 
east-1-3: 58 * 
east-1-3: 58 
east-1-4:  5 
east-1-5:  5 
east-1-6:  4 
east-1-7: 30 * 
east-1-7: 30 
west-1-1:  4 
west-1-10: 50 * 
west-1-10: 50 
south-1-2: 30 * 
south-1-2: 30 

予想される出力:

east-1-1: 50 * 
east-1-2:  8 
east-1-3: 58 * 
east-1-4:  5 
east-1-5:  5 
east-1-6:  4 
east-1-7: 30 * 
west-1-1:  4 
west-1-10: 50 * 
south-1-2: 30 * 

答えて

1

私はあなたがちょうどあなたの最後のecho文を置く必要があると思いますのdスイッチの後ではなく、スイッチのエラー。そうすれば、毎回実行するのではなく、残りのswitch文が実行されないときに実行されます。だから、

case "${cluster}" in 
    east-1-1) 
     echo "${cluster}:${getCount} * ";; 
    east-1-3) 
     echo "${cluster}:${getCount} * ";; 
    east-1-7) 
     echo "${cluster}:${getCount} * ";; 
    west-1-10) 
     echo "${cluster}:${getCount} * ";; 
    south-1-2) 
     echo "${cluster}:${getCount} * ";; 
    *) 
     echo "${cluster}:${getCount}";; 
    esac 
+0

さて、それでした!それを指摘していただきありがとうございます!今はうまくいく。 – noober

2

彼らのアクションが同じであれば、あなたは同じ枝に対応するすべての例を列挙することによって簡素化することができます。

case $cluster in 
    east-1-[137] | west-1-10 | south-1-2) 
     echo "$cluster:$getCount * ";; 
    *) 
     echo "$cluster:$getCount";; 
esac 

(デフォルト処理は、現在受け入れ答えから貼り付け/コピーです。)

また、あなたはどちらの場合も同じであるコードを考慮することがあります。

suffix='' 
case $cluster in 
    east-1-[137] | west-1-10 | south-1-2) 
     suffix=' * ';; 
esac 
echo "$cluster:$getCount$suffix" 
+0

ありがとうございます。これは素晴らしい答えです。はるかに洗濯機。ご意見ありがとうございます! – noober

関連する問題