检查用户是否在脚本中为其帐户设置了密码

som*_*ing 1 shell bash password shell-script test

我正在编写一个脚本,需要检查 $user 的帐户是否设置了密码,我该怎么做?

我知道这个:

passwd --status username
Run Code Online (Sandbox Code Playgroud)

显示帐户状态信息。状态信息由 7 个字段组成。第一个字段是用户的登录名。第二个字段指示用户帐户是否有锁定密码 (L)、没有密码 (NP) 或有可用密码 (P)。第三个字段给出上次更改密码的日期。接下来的四个字段是密码的最短期限、最长期限、警告期限和不活动期限。这些年龄以天数表示。

但我需要一些适合 if test

这是代码:

userPass()
{
    for i in "#@"
    do
        if [ "$i" = root ]
        then
            continue
        else
            echo "Changing password for $i:"
            echo $i:$i"YOURSTRONGPASSWORDHERE" | chpasswd
            if [ "$?" = 0 ]
            then
                echo "Password for user $i changed successfully"
            fi
        fi
    done
}
userPass $1 $2 $3
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 5

由于输出passwd --status指示用户是否没有密码(“has no password (NP)”),您可以检查:

if [[ $(passwd --status "$i" | awk '{print $2}') = NP ]]
then
    echo "$i doesn't have a password."
fi
Run Code Online (Sandbox Code Playgroud)

或者:

case $(passwd --status "$i" | awk '{print $2}') in
  NP)  echo "$i doesn't have a password."
       # set password here.
       ;;
  L)  echo "$i's account is locked." ;;
  P)  echo "$i has a password." ;;
esac
Run Code Online (Sandbox Code Playgroud)