내 bash 스크립트에서 파일에 특정 문자열이 없으면 줄을 인쇄하려고 합니다.
if grep -q "$user2" /etc/passwd; then
echo "User does exist!!"
문자열이 파일에 존재하도록 하려면 이렇게 작성하면 되지만 /etc/passwd 파일에서 사용자를 찾을 수 없는 경우 "사용자가 존재하지 않습니다"라고 인쇄하도록 변경하려면 어떻게 해야 합니까?
답변1
grep
패턴의 인스턴스가 하나 이상 발견되면 성공을 반환하고, 아무것도 발견되지 않으면 실패를 반환합니다. 따라서 else
"예"와 "아니오"를 모두 인쇄하려면 절을 추가하거나 조건을 직접 부정하여 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
답변2
당신은 그것을 사용할 수 있습니다grep 옵션 "-L/--files-without-match", 파일에 문자열이 포함되어 있지 않은지 확인하십시오.
if [[ $(grep -L "$user2" /etc/passwd) ]]; then
echo "User does not exist!!";
fi
답변3
또 다른 접근 방식은 종료 상태를 찾는 것입니다 grep
. 예를 들어:
grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
echo "User does not exist!!"
grep
일치하는 항목을 찾지 못하면 종료 1
되므로 $?
종료됩니다 1
. 성공하면 grep
항상 반환됩니다 . 그래서 0
사용하기가 $? != 0
더 쉽습니다 $? == 1
.
답변4
간단한 한 줄의 코드로 문제를 해결했습니다.
for f in *.txt; do grep "tasks:" $f || echo $f; done
이 명령은 디렉터리에서 txt 확장자를 가진 모든 파일을 확인하고, 발견되면 검색 문자열(예: "task:")을 기록하고, 그렇지 않으면 파일 이름을 기록합니다.