verifique se o usuário tem uma senha definida para sua conta em um script

verifique se o usuário tem uma senha definida para sua conta em um script

Estou escrevendo um script e preciso verificar $user se a conta dele tem uma senha definida, como posso fazer isso?

Eu sei disso:

passwd --status username

Exibir informações de status da conta. As informações de status consistem em 7 campos. O primeiro campo é o nome de login do usuário. O segundo campo indica se a conta do usuário possui senha bloqueada (L), não possui senha (NP) ou possui senha utilizável (P). O terceiro campo fornece a data da última alteração de senha. Os próximos quatro campos são idade mínima, idade máxima, período de aviso e período de inatividade da senha. Essas idades são expressas em dias.

mas preciso de algo que caiba em umif test

Aqui está o código:

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

Responder1

Como a saída de passwd --statusindica se o usuário não possui senha ("não possui senha (NP)"), você pode verificar se:

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

Ou:

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

Responder2

Que tal:

if [ `passwd -S ${i} | cut -d" " -f2` == "P" ]; then do some stuff; fi

Responder3

Também podemos fazer check-in /etc/passwordse tivermos acesso.

if [ `awk -F ':' '/^'$i':/ {print $2}' /etc/shadow` ] ; then 
   echo "User has passwd" ; 
else 
   echo "NO passwd";
fi

informação relacionada