编写一个输出本地用户及其密码到期日期的脚本

编写一个输出本地用户及其密码到期日期的脚本

我应该编写一个脚本来输出本地用户的真实姓名及其密码过期信息。

这就是我现在所拥有的。任何帮助,将不胜感激。

$ cat /etc/passwd | grep '/home' | cut -d: -f5 ;chage -l {} | \
    fgrep "Password expires"'| column -t

答案1

获取本地用户的更好方法可能是查看用户是否具有有效的登录 shell:

getent passwd | grep -f /etc/shells

这是应该起作用的东西:

getent passwd | grep -f /etc/shells | tr ',' ':' | \
    awk -F: '{print $1, $5}' | while read USER NAME 
    do 
        echo $NAME:$(chage -l $USER| awk -F': ' '/Password expires/{print $2}')
    done | column -ts: 

使用xargs,可以执行以下操作:

getent passwd | grep -f /etc/shells | tr ',' ':' | awk -F: '{print $1, $5}' | \
    xargs -L1 bash -c 'echo ${@:2}:$(chage -l $1| awk -F": " "/Password expires/{print \$2}")' : | \
    column -ts: 
  • 使用tr替换为,:我们可以直接从 GECOS 字段中提取全名。
  • column可以使用 给定一个输入分隔符-s,这使我们可以将多单词名称保留在一列中。
  • -L使用xargs一个线每个命令的输入,以便将用户名和全名传递给每个命令。
  • ${@:2}- 从第二个参数开始的所有参数(跳过第一个)。

输出示例:

root                      never
Murukesh Mohanan          never
Guest                     never

答案2

您可以使用xargs如下方式迭代结果:

$ grep '/home' /etc/passwd | cut -d: -f1 | xargs -n1 -I{} chage -l {} | \
    grep "Password expires" | column -t
Password  expires  :  never

在此变体中,我们使用switchxargs进行调用-n1,因此它只会chage -l使用单个用户名参数进行调用。告诉-I{}我们xargs用作{}宏,以便我们可以在调用时标记我们希望它放置参数的位置chage

答案3

cut -d: -f1,3,5 /etc/passwd | while IFS=: read -r user userid fullname
do
    if [ "$userid" -gt 500 ];
    then
    echo "Full Name: $fullname"
    echo "Password Expiry date: $(chage -l "$user" | head -2 | tail -1)"
    fi
done

我只是添加了检查本地用户的额外步骤,因为/etc/passwd文件通常也包含我们不想要的系统用户。另外,我使用while循环来迭代文件以获得更好的可读性。

相关内容