创建文件以自动检查指定用户的用户列表

创建文件以自动检查指定用户的用户列表

我对 Bash 脚本还很陌生,但我通过深入的谷歌搜索创建了这个

我正在尝试创建一个在 Ubuntu 上运行的 bash 脚本,它将检查用户列表并查找不在指定列表中的任何用户。到目前为止,我已经写了以下内容:

Cat /etc/passwd | grep -o -P'.{0,40}:1[0-9][0-9][0-9].{0,0}.' | cut -d: -f1

查看 passwd 文件,然后仅查找用户 ID 为 1000 或以上的行,并且每行用户 ID 之前的所有内容都通过管道传输到 cut 中,这将删除每个用户的用户名以外的所有内容。

然后我想让脚本检查文件中我指定的用户名(可能是从列表中复制的),并将每个用户名与上面的输出进行比较。删除所有指定的用户名。

例如:

我的电脑上有用户 John、Ben 和 Tom,如果我将 John 和 Ben 放在脚本正在访问的文件中,它应该输出 Tom,因为他没有被指定

我该如何做这件事?

答案1

该代码应该适合您。

for username in $( awk -F':' '$3 >= 1000 {print $1}' /etc/passwd )
do
        if ! grep -q "$username" list.txt; then
                echo "$username"
        fi
done

将要签到的用户名保存在 list.txt 中,每行一个用户

答案2

grep允许从文件中指定模式。因此,您可以使用grep -f选项来实现此目的并-v进行逆向模式匹配,即打印与模式不匹配的行。因此,

 printf "^%s\n" 'John' 'Ben' > /tmp/list.txt
 grep -v -f /tmp/list.txt  /etc/passwd | cut -d ':' -f 1
 rm l/tmp/ist.txt

我们还可以考虑大于 999 的 UID,因为默认情况下,它指的是人类用户,除非由系统管理员更改。

awk -F ':' '$1 !~ /John|Ben|nobody/  && $3 > 999' /etc/passwd

相关内容