bash 脚本 - 如何编写有效的 case 语句来处理多个条件

菜鸟

我有一个读取主列表的脚本,List A使用 while 循环调用它

名单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 *
埃德姆科夫

我认为您只需要将最后一个 echo 语句放在 switch 的默认值中,而不是在 switch 之后。这样,当您的 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Bash脚本if语句具有多个条件

Bash脚本Case语句(如果不是逻辑)

如何根据预定义的宏(C ++预处理器)编写有效令牌?

Bash脚本使用多个进程来处理文件

bash脚本编写-case语句无法正确评估字符串(值)

如何在bash shell脚本中编写条件if语句?

如何在bash脚本中编写多个if条件阶梯?

在bash脚本中的case语句中捕获模式组

具有OR条件的Bash脚本

历史记录命令在终端中有效,但作为bash脚本编写时无效

在bash脚本中测试多个值的最有效方法是什么

Bash Shell脚本编写有关语法和基本名称的基本问题

bash脚本中的多个If语句

使用条件“ IF语句”的bash脚本的Windows批处理等效

如何在bash case语句中使用条件构造?

具有多个条件的 Ruby Case 语句

如何在bash脚本中使用getopts有效测试有效的字符串输入

bash脚本中的if语句有什么作用?

bash脚本-带有if语句的Zenity列表

如何在bash脚本的select语句中调用脚本

如何从bash制作批处理脚本

bash脚本中有多个Fortran参数

在bash中使用do循环和case语句创建菜单驱动的脚本

bash:不要从脚本中提示select case语句-可能吗?

BASH脚本:在CASE语句中声明一个变量以全局使用

使用case语句进行决策时,bash脚本不起作用

嵌套在While循环中的Case语句在BASH脚本中导致无限循环

Bash 脚本 - 在 case 结构或 if else 语句中不执行读取命令

条件失败时如何停止bash脚本?