如何使用 Bash 检查 UID 是否唯一?

How to check if a UID is unique using Bash?

我正在尝试做一个简单的 bash 脚本来检查 /etc/passwd 中是否存在不唯一的 UID。
我已经编写了一个脚本来显示所有 UID,但我无法弄清楚如何比较它们和 return 如果它存在则不是唯一的。

这是我写的脚本:

#!/bin/bash
passwd="$(cat /etc/passwd)"
while read -r line; do
    IFS=':' read -ra arrayPasswd <<< "$line"
    echo ${arrayPasswd[2]}
done <<< "$passwd"

我怎么能比较它们和 return 万一有一个不是唯一的?

如果您有输出所有 UID 的脚本,您可以使用 sortuniq 程序来获得所需的结果:

$ your-script | sort | uniq -d

uniq 程序取一些行并删除连续的重复。标志 -d 使其只输出重复项并删除唯一的。您需要先使用 sort 才能连续重复。

使用 awk:

$ awk -F: 'a[]++==1 { print  }' /etc/passwd

解释:

在关联数组(a.k.a。字典)中,记录 UID 的出现次数。

如果任何 UID 重复,打印它。