2012-01-27 33 views
8

Tôi đang viết một tập lệnh để thêm người dùng mới vào hệ thống OS X trên dòng lệnh. Tôi biết tôi có thể liệt kê tất cả người dùng trên một hệ thống với ID người dùng của họ sử dụng:Tìm ID người dùng cao nhất trong Mac OS X

dscl . -list /Users UniqueID 

mang đến cho một cái gì đó như:

xxxxxxx       937 
xxxxxxxx      939 
xxxxx       940 
xxxxxx       941 

Làm thế nào tôi có thể lấy ID người dùng lớn nhất từ ​​đầu ra này để lưu trữ trong một biến?

+0

Đối với những người không sử dụng OSX, bạn có thể vui lòng đăng mẫu sản phẩm trông như thế nào – SiegeX

Trả lời

10

này sẽ cung cấp cho bạn phù hợp với ID cao nhất:

dscl . -list /Users UniqueID | sort -nr -k 2 | head -1 
+1

Đã kết thúc bằng cách sử dụng: 'firstid = \' dscl. -list/Users UniqueID | sắp xếp -nr -k 2 | đầu -1 | grep -oE '[0-9] + $' \ '' –

2

Bạn có thể làm được điều này khá dễ dàng (và hiệu quả) chỉ với awk

awk '$2>m{m=$2}END{print m}' file 

Để lưu trữ nó trong một biến làm:

highestID=$(awk '$2>m{m=$2}END{print m}' file) 
1

Kết hợp câu trả lời của Scott Hunter và SiegeX + một số Python:

# Max User ID 
MAXUID=`dscl . list /Users UniqueID | awk '$2>m{m=$2}END{print m}'` 

# Next User ID 
NEXTUID=$(($MAXUID + 1)) 

# Three Ways to Retrieve Specific User ID 
UID=`id -u $USER` 
UID=`dscl . list /Users/$USER | awk '{print $2}'` 
UID=`python -c 'import pwd,os; print pwd.getpwnam(os.getenv("USER")).pw_uid'` 


# Three Ways to Retrieve Max Group ID 
MAXGID=`dscacheutil -q group | grep gid | awk '$2>n{n=$2}END{print n}'` 
MAXGID=`dscl . list /Groups PrimaryGroupID | awk '$2>n{n=$2}END{print n}'` 
MAXGID=`python -c 'import grp;print grp.getgrgid(max(g.gr_gid for g in grp.getgrall()))'` 
    # notice the python method has a different max groupid 
    # this is because nobody/nouser groups have negative values for PrimaryGroupID in dscl 
    # but python gives these absolute values: 
    # 2^32 = 4294967296 
    # if you subtract one you get 4294967295 (the max group id python returns) 

# Two Ways to Retrieve Specific Group ID (i.e. staff) 
STAFFGID=`dscl . read /Groups/staff PrimaryGroupID | awk '{print $2}'` 
STAFFGID=`python -c 'import grp; print grp.getgrnam("staff").gr_gid'` 
Các vấn đề liên quan