# 리눅스 쉘 스크립트 username과 uid 출력방법 --- /etc/passwd 에 있는 유저의 정보를 출력하고 싶습니다. 그 내용중에 uid 가 500이상인 유저의 `uid`와 `username`, 이 2항목만 출력하고 싶습니다. ㅠㅠ
## 답변 도움 드릴 수 있는 한도 내에서 답변드릴 수 있습니다! PS --- 이것은 답변을 할 수도, 하지 않을 수도 있다는 마법같은 매직!
## 추가 답변 ``` awk -F: '{if ($3 >= 500) { print $1 ":" $3 } }' /etc/passwd ``` ## 참고자료 --- 1. https://goo.gl/aALuhw
정말 너무 너무 감사드립니다 ㅠㅠ 근데 제가 ``` #!/bin/bash printf "UID\tUSERNAME\tHOME-DIRECTORY\n" awk -F: '{if ($3 >= 1000) { print $3 $1 $6 } }' /etc/passwd ``` 위에 printf의 \t 이런식으로 지정을해서 $3 $1 $6 사이사이에 맞게 ":" 가 아닌 tab으로 항목을 구분하고 싶은데요 방법이 없을까요? ㅠㅠ 그리고 실행 결과는 이것인데 ``` UID USERNAME HOME-DIRECTORY 65534nfsnobody/var/lib/nfs 1000ccuser/home/ccuser 100118cc0220/home/18cc0220 1002kaka/home/kaka 1003bestuser/home/bestuser 1004test/home/test ``` 왜 UID가 65534인게 출력될까요??
## UID 조건 if문 조건식을 변경하여, 원하는 범위의 사용자만을 골라보세요. ``` // 500이상 1010미만 사용자 출력 awk -F: '{if ($3 >= 500 && $3 < 1010) { print $1 ":" $3 } }' /etc/passwd ``` ## tab으로 구분 print 부분에 탭을 넣어주세요. ``` // 구분자를 tab으로 awk -F: '{if ($3 >= 500 && $3 < 1010) { print $1 "\t" $3 } }' /etc/passwd ```
너무 감사합니다 그리고 탭으로 구분해봤는데 ㅠ ``` #!/bin/bash printf "UID\tUSERNAME\t\tHOME-DIRECTORY\n" awk -F: '{if ($3 >= 1000 && $3 < 2000) {print $3 "\t" $1 "\t\t\t" $6} }' /etc/passwd ``` 근데 출력결과가 ``` UID USERNAME HOME-DIRECTORY 1000 ccuser /home/ccuser 1001 18cc0220 /home/18cc0220 1002 kaka /home/kaka 1003 bestuser /home/bestuser 1004 test /home/test ``` 마지막 HOME-DIRECTORY 항목이 너무 제각각 예쁘게 정렬되지가 않네요 ㅠㅠ \t 으로 아무리 여유분을 주어도 이쁘게 나오지 않는데 방법이 없을까요??
## printf를 통한 형식 출력 코드 예 ``` #!/bin/bash printf "%5s\t%-12s\t%-16s\n" "UID" "USERNAME" "HOME-DIRECTORY" awk -F: '{if ($3 >= 1000 && $3 < 2000) { printf "%5d\t%-12s\t%-16s\n", $3, $1, $6} }' /etc/passwd ``` 실행 결과 ``` UID USERNAME HOME-DIRECTORY 1000 username /home/username 1001 domjudge-run /nonexistent ``` ## 참고자료 --- 1. https://goo.gl/93mCem
진짜 미쳤네요 정말 감사드립니다 ㅠ
좋은 주말되세요 :D