나를 도와주신 모든 분들께 감사드립니다. 다음 코드가 있습니다.여기
awk -F: '{if(system( "[ -d " $6 " ]") == 1) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd
그러나 나는 어리석었고 내 문제 전체를 설명하지 않았습니다. 사람들에게 질문을 바꾸는 대신 새로운 질문을 해보자고 생각했습니다.
내 목표는 /etc/passwd에 설정된 홈 디렉터리가 존재하지 않는 폴더를 가리키는 사용자 목록을 출력하는 것입니다. (위의 코드는 이를 성공적으로 수행합니다).
지금 내가 겪고 있는 문제는 각 사용자가 실제로 존재하는 홈 디렉터리를 가지고 있는 경우 빈 페이지 대신 "결과 없음"을 표시하고 싶다는 것입니다.
예를 들어 기본 RHEL 시스템에서 이 코드를 실행하면 다음과 같은 출력이 표시됩니다.
# awk -F: '{if(system( "[ -d " $6 " ]") == 1) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd
The directory /var/adm does not exist for user adm
The directory /var/spool/uucp does not exist for user uucp
The directory /var/gopher does not exist for user gopher
The directory /var/ftp does not exist for user ftp
The directory /var/empty/saslauth does not exist for user saslauth
위에 나열된 사용자는 로그인할 수 없기 때문에 실제로 중요하지 않습니다. 따라서 이를 설명하기 위해 다음과 같이 코드를 업데이트하고 싶었습니다.
awk -F: '{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd
이는 예상대로 작동하고 결과를 표시하지 않지만, 아무것도 표시하지 않는 대신 "결과 없음"을 표시하고 싶습니다. (이것은 어리석은 요청처럼 보일 수 있지만 볼 출력이 있는 경우 더 잘 작동하는 자동화된 도구에서 이 명령을 사용합니다.)
Google에서 검색하여 NR을 사용하는 몇 가지 예를 찾았지만 제대로 작동하지 못했습니다. 또한 ||를 살펴본 결과 특정 유형의 명령에 대해 "결과 없음"이 표시되지만 그것도 작동하지 않는 것 같습니다.
Google에서는 다른 옵션을 선택하는 데 도움을 주지 않으므로 도움을 주시면 정말 감사하겠습니다!
답변1
당신은 할 수
- 블록을 사용하여
BEGIN
플래그 설정 - 현재 테스트에서 누락된 디렉터리를 발견하면 플래그가 설정 해제됩니다.
- 플래그가
END
블록에 여전히 설정되어 있는지 확인하고 그렇다면 메시지를 인쇄하세요.
예를 들어
awk -F: '
BEGIN{nores=1;}
{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1; nores=0 }}
END{if (nores) print "No results";}
' /etc/passwd