bash를 사용하여 /etc/passwd
ID가 1000이 넘는 모든 사용자를 쿼리하려고 합니다. 존재한다면 뭔가를 하고, 그렇지 않다면 다른 것을 하세요. 혼란스러워요. 도움을 주시면 감사하겠습니다.
if [ "$(id -u)" -gt "1000" </etc/passwd]; then
do something
else
do something else
fi
답변1
루프에서 이 작업을 수행하려면 다음 을 bash
사용하는 것이 좋습니다 .read
IFS
#!/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
두 번째는 grep
uid가 1000인 행을 필터링합니다. 남은 행이 있으면 종료 상태는 0이 되고, 없으면 종료 상태는 1이 됩니다.
답변4
Tom의 코드를 사용하면 이것이 나에게 도움이 되었습니다.
#!/bin/sh
if grep -E '^[^:]*:[^:]*:[^:]{4}' /etc/passwd | grep -Evq '^[^:]*:[^:]*:1000:'
then
echo "exists"
else
echo "not exists"
fi