次の出力を返すシェルスクリプト(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"}'
私があなたの使命を間違って理解した場合は、訂正してください。