If 문이 etc/passwd?에서 사용자 ID를 쿼리합니까?

If 문이 etc/passwd?에서 사용자 ID를 쿼리합니까?

bash를 사용하여 /etc/passwdID가 ​​1000이 넘는 모든 사용자를 쿼리하려고 합니다. 존재한다면 뭔가를 하고, 그렇지 않다면 다른 것을 하세요. 혼란스러워요. 도움을 주시면 감사하겠습니다.

if [ "$(id -u)" -gt "1000" </etc/passwd]; then
    do something
else
    do something else
fi

답변1

루프에서 이 작업을 수행하려면 다음 을 bash사용하는 것이 좋습니다 .readIFS

#!/usr/bin/env bash
while IFS=':' read -r user passwd uid gid comment home shell;  do
    if [ "$uid" -gt 1000 ] ; then
        echo GT $user
    else
        echo LT $user
    fi
done < /etc/passwd

답변2

/etc/passwd직접 읽는 대신 사용해야 합니다 getent passwd. 일부 사용자가 LDAP와 같은 것에 저장되어 있는 경우에도 작동할 수 있습니다. awk콜론으로 구분된 출력 형식에 적합합니다.

그러면 UID가 1000보다 큰 모든 사용자의 사용자 이름이 인쇄됩니다.

getent passwd | awk -F: '$3 > 1000 {print $1}'

found해당 콘텐츠가 하나 이상 발견되면 다음과 같이 인쇄됩니다.

getent passwd | awk -F: '$3 > 1000 {print "found"; exit}'

답변3

이 시도:

if grep -E '^[^:]*:[^:]*:[^:]{4}' /etc/passwd | grep -Evq '^[^:]*:[^:]*:1000:'

첫 번째는 uid가 4자리 이상인 행을 grep검색합니다 . passwd두 번째는 grepuid가 1000인 행을 필터링합니다. 남은 행이 있으면 종료 상태는 0이 되고, 없으면 종료 상태는 1이 됩니다.

답변4

Tom의 코드를 사용하면 이것이 나에게 도움이 되었습니다.

#!/bin/sh
if grep -E '^[^:]*:[^:]*:[^:]{4}' /etc/passwd | grep -Evq '^[^:]*:[^:]*:1000:'
then 
    echo "exists"
else
    echo "not exists"
fi

관련 정보