순환 사용자 문제

순환 사용자 문제

사용자 ID 루프로 인해 어려움을 겪고 있습니다. /etc/passwd에 999보다 큰 ID를 가진 모든 사용자를 나열하려고 합니다. if..fi 문장을 인식하지 못합니다. 최소한의 설치이므로 "awk" 명령이 없으면 이것이 실제 코드입니다.

cat /etc/passwd | while IFS=: read name pass uid gid geos home; do if [$uid > 999]; then echo $name di done;

-gt도 시도했지만 작동하지 않았습니다.

답변1

당신은 그렇지 않다고 언급했습니다 awk. 이는 효율적인 솔루션이었을 것이기 때문에 부끄러운 일입니다.

awk -F: '$3 > 999' /etc/passwd

4자 이상의 uid로 사용자를 추출할 수 있는 grep경우 :cut

grep '^[^:]*:[^:]*:[^:][^:][^:][^:]' /etc/passwd | cut -d: -f1

또는 sed:

sed -n 's/^\([^:]*\):[^:]*:[^:][^:][^:][^:].*/\1/p' /etc/passwd

루핑을 위해 실제로 셸을 사용해야 하는 경우 고정 코드 버전이 있습니다. 가장 큰 실수는 이것이 [명령이라는 사실을 잊어버린 것입니다. 따라서 토크나이저에는 공백이 필요합니다. 나는 또한 그것을 정리했다 read.

while IFS=: read -r name x uid gid geos home shell
do
    [ "$uid" -gt 999 ] && echo "$name"
done

코드를 통과시키세요https://shellcheck.net/그것은 당신을 도울 것입니다. 다음에 추천할게요.

답변2

대괄호 주위에는 공백이 필요합니다.

이것:

if [$uid > 999];

해야 한다:

if [ "$uid" -gt 999 ];

숫자를 비교하는 경우 를 사용 -gt하고 변수를 인용하는 것을 잊지 마세요.

if구조의 끝도 마찬가지입니다 fi.di

스크립트는 다음과 같아야 합니다.

cat /etc/passwd | while IFS=: read name password uid gid geos home; do if [ "$uid" -gt 999 ]; then echo $name ;fi ;done 

관련 정보