사용자를 나열하고 사용자가 시스템에 없으면 0이 아닌 종료 코드를 반환합니다.

사용자를 나열하고 사용자가 시스템에 없으면 0이 아닌 종료 코드를 반환합니다.

사용자를 찾아야 하는데 해당 사용자가 시스템에 없으면 명령은 0이 아닌 반환 코드로 종료되어야 합니다. 에서 이 작업을 수행할 수 있지만 스크립트 bash가 아닌 줄 명령으로 필요합니다 . bash그게 가능합니까?

답변1

시스템에 사용자가 존재하는지 테스트하는 좋은 방법은 를 사용하는 것입니다 . getentgetent유틸리티는 다양한 "데이터베이스"에서 다양한 정보를 반환할 수 있습니다 passwd(예: 사용 가능한 로그인 쉘 내보내기).groupgetent

사용자가 testuser시스템에 있는지 테스트하려면 사용자의 항목을 요청 getent하십시오 passwd.

getent passwd testuser

passwd성공하면 하나의 항목이 출력되고 종료 상태는 0이 됩니다 getent. 실패하면 출력이 없고 종료 상태가 0이 아닙니다. 나는 이것이 당신이 요청한 명령이라고 믿습니다.

유틸리티에서 생성된 모든 출력을 삭제하고 if다음과 같은 문에서 사용할 수 있습니다.

theuser=testuser

if getent passwd "$theuser" >/dev/null
then
    printf 'The user "%s" exists\n' "$theuser"
else
    printf 'The user "%s" does not exist\n' "$theuser"
fi

물론 /etc/passwd일부 명령을 사용하여 파일을 직접 구문 분석할 수 있지만 grep이는 오류가 발생하기 쉽고( getent위에 표시된 사용법과 비교하여) 일부 형태의 디렉터리 서비스를 사용하는 시스템에서는 제대로 작동하지 않습니다.

관련 정보