파일에 문자열이 없을 때 grep을 사용하는 방법 echo “User does exist!!” 이것은

내 bash 스크립트에서 특정 문자열이 파일에 없으면 줄을 인쇄하려고합니다.

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"

이것은 파일에 문자열이 존재하기를 원한다면 어떻게 작성했지만 / etc / passwd 파일에 사용자가없는 경우 “사용자가 존재하지 않습니다”라는 메시지를 출력하도록 어떻게 변경할 수 있습니까?



답변

grep패턴의 인스턴스를 하나 이상 발견하면 성공을 리턴하고 그렇지 않으면 실패를 리턴합니다. 따라서 else“does”와 “does not”인쇄를 원할 경우 절을 추가 하거나 if조건 만 무효화하여 오류를 얻을 수 있습니다. 각각의 예 :

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"
else
    echo "User does not exist!!"
fi

if ! grep -q "$user2" /etc/passwd; then
    echo "User does not exist!!"
fi

답변

대안은의 종료 상태를 찾는 것입니다 grep. 예를 들면 다음과 같습니다.

grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
    echo "User does not exist!!"

경우 grep가 종료됩니다 일치를 찾는데 실패 1, 그렇게 $?될 것입니다 1. 성공 grep하면 항상 반환 0됩니다. $? != 0보다 사용하는 것이 안전합니다 $? == 1.


답변

간단한 라이너로 해결합니다.

for f in *.txt; do grep "tasks:" $f || echo $f; done

이 명령은 확장자가 txt 인 디렉토리의 모든 파일을 검사하고 검색 문자열 (예 : “tasks :”)을 찾거나 파일 이름을 씁니다.


답변

당신은 사용할 수 있습니다 그렙 옵션을 “-L / –files-없는 경기” , 파일 문자열을 포함하지 않는 경우 확인하는 :

if [[ $(grep -L "$user2" /etc/passwd) ]]; then
  echo "User does not exist!!";
fi