2012-01-27 18 views
8

Piszę skrypt, aby dodać nowych użytkowników do systemu OS X w wierszu poleceń. Wiem, że mogę wymienić wszystkich użytkowników systemu z ich identyfikatorami użytkowników przy użyciu:Znajdź najwyższy identyfikator użytkownika w systemie Mac OS X

dscl . -list /Users UniqueID 

co daje mniej więcej tak:

xxxxxxx       937 
xxxxxxxx      939 
xxxxx       940 
xxxxxx       941 

Jak mogę odzyskać największy identyfikator użytkownika z tego wyjścia, aby przechowywać w zmienna?

+0

Dla tych z nas, którzy nie korzystają z OSX, można proszę umieścić próbkę co wyjście wygląda – SiegeX

Odpowiedz

10

To daje wiersz z najwyższym id:

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

skończył przy użyciu: 'firstid = \' DSCL. -list/Users UniqueID | sort -nr -k 2 | głowa -1 | grep -oE '[0-9] + $' \ '' –

2

można to zrobić dość łatwo (i skutecznie) z tylko awk

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

przechowywać go w zmiennej należy:

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

Kombinacja Scotta Huntera i odpowiedzi SiegeX + trochę Pythona:

# 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'` 
Powiązane problemy