シェルコマンドを使用して、特定の文字列が存在するかどうかシェルスクリプトの出力を確認します。

シェルコマンドを使用して、特定の文字列が存在するかどうかシェルスクリプトの出力を確認します。

次の出力を返すシェルスクリプト(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

これに加えて、従業員ID us321000034006755文字列も確認したいと思います。これは、使用中のコマンドで有益な結果を返さずにこれを行う方法がわからないためです。私は何を逃したことがありませんか?どんな提案でもいいでしょう。

答え1

出力に文字列が含まれているとしますus321000034006755(separator)ITdept

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

変数に2つの部分文字列がある場合:

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

単語の境界で一致[[:<:]]します。[[:>:]]


以下を使用すると、これを行う方がはるかにawk簡単になります。Roman Perechrestが提案したとおりまたは

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

答え2

出力に常に2行しか含まれていない場合 -アッ複数の現場検査によるソリューション:

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

スクリプトは、1つ以上の「ITdept」単語を含む文字列の数を数えます。

または1行(awkを使用):

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

私があなたの使命を間違って理解した場合は、訂正してください。

関連情報