我正在编写一个脚本,需要检查 $user 的帐户是否设置了密码,我该怎么做?
我知道这个:
passwd --status username
显示帐户状态信息。状态信息由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
答案1
由于 的输出passwd --status
表明用户是否没有密码(“has no password (NP)”),因此您可以检查:
if [[ $(passwd --status "$i" | awk '{print $2}') = NP ]]
then
echo "$i doesn't have a password."
fi
或者:
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
答案2
怎么样:
if [ `passwd -S ${i} | cut -d" " -f2` == "P" ]; then do some stuff; fi
答案3
/etc/password
如果我们有访问权限,我们也可以办理入住。
if [ `awk -F ':' '/^'$i':/ {print $2}' /etc/shadow` ] ; then
echo "User has passwd" ;
else
echo "NO passwd";
fi