在Mac OS X中查找最高的用户ID

10

我正在编写一个脚本,以在命令行上向OS X系统添加新用户。我知道我可以使用以下命令列出系统上所有用户及其用户ID:

dscl . -list /Users UniqueID

这将会得到类似这样的结果:

xxxxxxx                         937
xxxxxxxx                        939
xxxxx                           940
xxxxxx                          941

我该如何从这个输出中获取最大的用户ID并将其存储在一个变量中?


对于那些不使用OSX的人,请您能否发布一个输出样例? - SiegeX
3个回答

11

这将给你具有最高ID的行:

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

1
最终使用了:firstid=\dscl . -list /Users UniqueID | sort -nr -k 2 | head -1 | grep -oE '[0-9]+$'`` - Jake Petroules

3

你可以用awk轻松高效地完成这个任务。

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

要将它存储在变量中,请执行以下操作:

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

1

结合Scott Hunter和SiegeX的答案+一些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'`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接