簡體   English   中英

bash腳本編寫-如何編寫有效的case語句以處理多個條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM