проверить, установлен ли пароль для учетной записи пользователя в скрипте

проверить, установлен ли пароль для учетной записи пользователя в скрипте

Я пишу скрипт и мне нужно проверить $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

Связанный контент