2012-01-27 9 views
8

Sto scrivendo uno script per aggiungere nuovi utenti a un sistema OS X sulla riga di comando. So che posso elencare tutti gli utenti su un sistema con i loro ID utente utilizzando:Trova l'ID utente più alto in Mac OS X

dscl . -list /Users UniqueID 

che dà qualcosa di simile:

xxxxxxx       937 
xxxxxxxx      939 
xxxxx       940 
xxxxxx       941 

Come posso recuperare il maggior ID utente da questa uscita per memorizzare in un variabile?

+0

Per quelli di noi che non utilizzano OSX, potete per favore inviare un esempio di ciò che l'output appare come – SiegeX

risposta

10

Questo vi darà la linea con il più alto ID:

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

finito per usare: 'firstid = \' dscl. -list/Users UniqueID | ordina -nr -k 2 | capo -1 | grep -oE '[0-9] + $' \ '' –

2

Si può fare questo abbastanza facilmente (ed efficiente) con appena awk

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

Per memorizzare in una variabile do:

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

Combinazione di risposta di Scott Hunter e SiegeX + alcuni 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'`