사용자 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