使用 shell 命令检查 shell 脚本的输出中是否存在特定字符串

使用 shell 命令检查 shell 脚本的输出中是否存在特定字符串

我有一个 shell 脚本 (test1.sh),它返回以下输出

 Employee ID          emp Type  return type  Admin User
   us321000034006755    ITdept      access    Itadminuser

我想检查输出是否包含字符串 ITdept,因为我使用了以下命令:

if ./test1.sh | grep -q 'ITdept'; 
then
    echo "found"
else
    echo "Not found"
fi

除此之外,我还想检查字符串 Employee ID us321000034006755,因为它不会使用我正在使用的命令返回任何富有成效的结果,不确定如何完成此操作。我错过了什么吗?任何建议都会很好

答案1

假设输出将包含字符串us321000034006755(separator)ITdept

if cmd | grep -q '[[:<:]]us321000034006755[[:>:]][[:space:]]*[[:<:]]ITdept[[:>:]]'; then
   ...
fi

如果变量中有两个子字符串:

if cmd | grep -q "[[:<:]]$user_id[[:>:]][[:space:]]*[[:<:]]$user_dept[[:>:]]"; then
   ...
fi

[[:<:]][[:>:]]在单词边界上匹配。


使用 来做到这一点会容易得多awk正如罗曼·佩雷赫雷斯特所建议的那样, 或者

cmd | awk '$1 == "us321000034006755" && $2 == "ITdept" { print "found"; exit } END { print "not found" }'

答案2

如果输出始终只包含 2 行 -awk通过多个字段检查的解决方案:

awk 'NR==2 { 
         printf "%s%s\n",($1=="us321000034006755" && $2=="ITdept")? "":"not ","found" 
     }' <(sh ./test1.sh)

答案3

如果您需要在另一个脚本中执行此检查,您可以使用以下命令来执行此操作:

#!/bin/bash

var=$(./test1.sh | grep -c ITdept)

if [ $var > 0 ];
then
    echo "found"
else
    echo "Not found"
fi

脚本计算包含一个或多个“ITdept”单词的字符串数量。

或者单行(使用 awk):

./test1.sh | grep -c ITdept | awk '{if ($0==0) print "not found"; else if ($0>0) print "found"}'

如果我误解了你的任务,请纠正我。

相关内容