다음 출력을 반환하는 쉘 스크립트(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"}'
내가 당신의 임무를 잘못 이해했다면 정정해 주십시오.