쉘 명령을 사용하여 특정 문자열이 있는지 쉘 스크립트의 출력을 확인하십시오.

쉘 명령을 사용하여 특정 문자열이 있는지 쉘 스크립트의 출력을 확인하십시오.

다음 출력을 반환하는 쉘 스크립트(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

변수에 두 개의 하위 문자열이 있는 경우:

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

스크립트는 하나 이상의 "ITdept" 단어를 포함하는 문자열 수를 계산합니다.

또는 한 줄(awk 사용):

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

내가 당신의 임무를 잘못 이해했다면 정정해 주십시오.

관련 정보