
Я пишу скрипт и мне нужно проверить $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
указывает на то, что у пользователя нет пароля («не имеет пароля (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