スクリプトでユーザーのアカウントにパスワードが設定されているかどうかを確認する

スクリプトでユーザーのアカウントにパスワードが設定されているかどうかを確認する

スクリプトを書いていて、$user のアカウントにパスワードが設定されているかどうかを確認する必要があります。どうすればいいでしょうか?

私はこれについて知っています:

passwd --status username

アカウント ステータス情報を表示します。ステータス情報は 7 つのフィールドで構成されます。最初のフィールドはユーザーのログイン名です。2 番目のフィールドは、ユーザー アカウントのパスワードがロックされているか (L)、パスワードがないか (NP)、または使用可能なパスワードがあるか (P) を示します。3 番目のフィールドには、パスワードの最終変更日が表示されます。次の 4 つのフィールドは、パスワードの最小有効期間、最大有効期間、警告期間、および非アクティブ期間です。これらの有効期間は日数で表されます。

でも、私は収まるものが必要なのです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

関連情報