스크립트가 실패할 경우를 대비해 조건부 if-else $? -ne 0을 사용하고 있지만 내부에서 루프가 실행됩니다. 내가 원하는 것은 모든 검사가 완료된 후 스크립트가 실패하는 것입니다. 한 번의 확인 후에 실패했습니다. 아래는 내 스크립트입니다
for i in `cat xyz.txt`
do
grep $i abc.txt
if [[ $? -ne 0 ]]; then
echo $i "is missing in the file abc.txt"
exit -1
fi
done
답변1
반복 후 실패 알림을 설정합니다.
#!/bin/sh
fail=false
while IFS= read -r pattern; do
if ! grep -e "$pattern" abc.txt; then
fail=true
fi
done <xyz.txt
"$fail" && exit 1
xyz.txt
패턴을 한 줄씩 읽어서 각 패턴에 차례로 적용 합니다 grep
. abc.txt
패턴이 일치하지 않는 경우 변수는 fail
문자열로 설정됩니다(처음부터 문자열로 설정되었습니다) true
.false
루프 후에 $fail
명령 및 실행으로 사용되어 is 또는 exit 1
에 따라 0이 아닌 종료 상태로 스크립트를 종료합니다 .fail
true
false
명령의 출력은 grep
표준 출력에 기록됩니다. 제 생각에는 이것이 여러분이 원하는 것입니다. 그렇지 않으면 일치하지 않는 패턴을 찾은 후 모든 패턴을 테스트할 필요가 없습니다.