Вы можете довольно легко объединить два из трех (количество пользователей и количество заблокированных аккаунтов) с паролем awk
ed passwd - Sa
, но вам придется замкнуть петлю вокруг chage
, чтобы показать просроченные пароли.
passwd -Sa | awk 'BEGIN {lockedusers=0} $2 ~ /L/ {lockedusers++} END {print "Total users:",NF;print "Locked users:",lockedusers}'
neuser=0
for user in $(cut -f1 -d: /etc/passwd); do
if chage -l "$user" | grep -i '^Password expires' | grep -q never; then
neuser=$((neuser+1))
fi
done
echo "Non-expiring users: $neuser"
Если в вашей реализации passwd
отсутствует -a
(например, дистрибутивы, производные от Red Hat), вы можете использовать аналогичный для цикла
:
neuser=0
for user in $(cut -f1 -d: /etc/passwd); do
if chage -l "$user" | grep -i '^Password expires' | grep -q never; then
neuser=$((neuser+1))
fi
passwd -S "$user"
done | awk 'BEGIN {lockedusers=0} $2 ~ /L/ {lockedusers++} END {print "Total users:",NF;print "Locked users:",lockedusers}'
echo "Non-expiring users: $neuser"