
スクリプトを書いていて、$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