홈 디렉토리 세트가 존재하지 않는 사용자 목록을 생성하려고 합니다. awk로 이 작업을 수행할 수 있을 것 같지만 구문에 문제가 있습니다.
]에서 "잘못된 구문"이라는 메시지가 계속 나타납니다. 내가 뭘 잘못했나요?
awk -F: '{ if(![ -d "$6"]){ print $1 " " $3 " " $7}}' /etc/passwd
내가 사용하게 될 최종 코드는 다음과 같습니다.
awk -F: '{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd
나는 가지고있다관련 질문이 있습니다..
답변1
당신이 사용할 수있는
시스템(명령어) 운영 체제 명령 실행주문하다그런 다음 awk 프로그램으로 돌아갑니다. 반품주문하다종료 상태.
예를 들어:
awk -F: '{if(system("[ ! -d " $6 " ]") == 0) {print $1 " " $3 " " $7}}' /etc/passwd
답변2
내 생각엔 그게 [ -d ]
별거 아닌 것 같아요 awk
. 뭔가의 빈 껍데기일 뿐입니다. 나는 이렇게 할 것이다:
awk -F: '{ print $1,$3,$7}' /etc/passwd |
while read name uid shell; do
[ -d "/home/$name" ] || echo "$name $uid $shell";
done
물론 @Janis가 올바르게 지적했듯이 셸에서 모든 작업을 수행할 수 있습니다.
while IFS=: read name x uid x x x shell rest; do
[ -d "/home/$name" ] || echo "$name $uid $shell"
done < /etc/passwd
답변3
당신은 그것을 사용할 수 있습니다줄을 서다:
BEGIN {
print getline < "file" < 0 ? "not exists" : "exists"
}
답변4
거의 어쩐지...
perl -F: -ane 'if(!-d $F[5]){ print "$F[0] $F[2] $F[6]" }' /etc/passwd