[英]bash scripting - how to write an effective case statement to handle multiple conditions
我有一個讀取主列表的腳本,使用while循環將其稱為List A
清單A:
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
我想做的就是對照此列表進行檢查:
east-1-1
east-1-3
east-1-7
west-1-10
south-1-2
正如我在上市case
和每個在我的項目的case
我想國旗降與*
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
這樣做嗎?
如果可以的話,請尋求幫助,或者有更好的書寫方法。
進行中的代碼:
#!/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 *
如果它們的動作相同,則可以通過枚舉同一分支中的所有相應個案來簡化操作。
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"
我認為您只需要將最后一個echo語句放在開關的默認位置,而不是放在開關之后。 這樣,它將在其余切換語句未執行時執行,而不是每次執行。
所以:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.