Bash - 对每个用户帐户运行“chage”命令

Bash - 对每个用户帐户运行“chage”命令

我必须审核每个环境中 Linux 服务器上的用户帐户,因此我想编写脚本来检查每个帐户是否已过期。我有一个for 循环它会提取 /etc/passwd 中列出的用户帐户,并将其存储在大批

#!/bin/bash
users = $(awk -F: '{ print $1}' /etc/passwd)
uservar=($users)

for value in "${uservar[0]}"
do chage -l $value
done

理想情况下,脚本应该首先显示用户名然后在新的一行上它会显示帐户到期日期以及该用户帐户的其他信息。该过程将对每个帐户重复。目前,它只显示所有用户帐户的到期日期和日期,没有用户名,所以我无法区分这些帐户。所有内容也堆叠在一起,因此很难阅读。理想情况下,输出应如下所示:

userA
Last Password Change:    1/2/34
Password Expires:        1/2/34
Password Inactive:       1/2/34
.....

userB
Last Password Change:    1/2/34
Password Expires:        1/2/34
Password Inactive:       1/2/34
.....

我将非常感激对此的任何帮助/建议。

答案1

对你的问题的字面答案是:

#!/bin/bash
users=$(awk -F: '{ print $1}' /etc/passwd)

for value in $users
do 
      echo $value
      chage -l $value
      echo "....."
      echo ""
 done

应以以下形式生成输出

userA
Last Password Change:    1/2/34
Password Expires:        1/2/34
Password Inactive:       1/2/34
.....

userB
Last Password Change:    1/2/34
Password Expires:        1/2/34
Password Inactive:       1/2/34
.....

请注意,信息chage显示的来源是在/etc/shadow文件(表示为自 1970 年 1 月 1 日以来的天数)。
直接解析该文件可能比使用chage和/或其他工具将这些字段转换为人类可读的输出并进行解析更有效。

相关内容