Bash 从列中提取特定值并从循环中退出

Bash 从列中提取特定值并从循环中退出,bash,shell,Bash,Shell,我想从下面的命令中提取列dispstatus,如果所有条目都是绿色的,那么我应该退出循环 sapcontrol -nr 01 -function GetProcessList 17.02.2020 01:40:34 GetProcessList OK name, description, dispstatus, textstatus, starttime, elapsedtime, pid disp+work, Dispatcher, GREEN, Running, 2020 02 16 03

我想从下面的命令中提取列dispstatus,如果所有条目都是绿色的,那么我应该退出循环

sapcontrol -nr 01 -function GetProcessList

17.02.2020 01:40:34
GetProcessList
OK
name, description, dispstatus, textstatus, starttime, elapsedtime, pid
disp+work, Dispatcher, GREEN, Running, 2020 02 16 03:50:28, 21:50:06, 59404
igswd_mt, IGS Watchdog, GREEN, Running, 2020 02 16 03:50:28, 21:50:06, 59405
gwrd, Gateway, GREEN, Running, 2020 02 16 03:50:30, 21:50:04, 59423
icman, ICM, GREEN, Running, 2020 02 16 03:50:30, 21:50:04, 59424
现在我使用了下面的命令,我没有得到所有的值,而是检查绿色和退出的计数,这是我目前不打算做的。你能帮帮我吗

while true ; do status=`sapcontrol -nr 01 -function GetProcessList |awk -F ',' '{if ($3) print $3;}'|grep -i GREEN | wc -l`; sleep 2; if [[ $status -ge 2 ]]; then break ;fi; done
编辑:不同行中的某些命令

while true ; do
   status=`sapcontrol -nr 01 -function GetProcessList |
      awk -F ',' '{if ($3) print $3;}'|
      grep -i GREEN |
      wc -l`
   sleep 2
   if [[ $status -ge 2 ]]; then
      break
   fi
done
谢谢, Anup

试试这个

while true ; do
    status=$(sapcontrol -nr 01 -function GetProcessList)
    case $status in
        *GREEN*GREEN*GREEN*GREEN*) break;;
    esac
done

我们怎么知道应该有多少人?或者,您的意思是当hs
$3
不是“绿色”时立即退出并出错吗?参见使用
if[$status-ge 2]
如果($status>=2))。您不想计数
绿色
,但您想何时计数?在
黄色
红色
上?或者当标题行后的任何记录没有绿色时?标题行总是输出的一部分吗?嗯,可能有一个问题1-如果出现更多的
绿色
字符串,2-如果出现的字符串不是特定列(我相信OP明确提到,在特定列上OP需要检查这个),这就是为什么我要检查第一行中字符串的列号。这些只是我的想法,rest OP只能让我们知道这一点。