Мне нужно проверять учетные записи пользователей на наших серверах Linux в каждой среде, поэтому я хочу выполнить сценарий, проверяющий, истек ли срок действия каждой учетной записи или нет. У меня есть цикл for , который извлекает учетные записи пользователей, перечисленные в / etc / passwd, и сохраняет их в массиве .
#!/bin/bash
users = $(awk -F: '{ print $1}' /etc/passwd)
uservar=($users)
for value in "${uservar[0]}"
do chage -l $value
done
В идеале сценарий сначала должен отображать имя пользователя , а затем в новой строке показывать дату истечения срока действия учетной записи и другую информацию для этой учетной записи . Процесс будет повторяться для каждой учетной записи.На данный момент просто отображается срок действия учетной записи и даты для всех учетных записей пользователей без имени пользователя, поэтому я не могу отличить учетные записи друг от друга. Все также сложено друг на друга, поэтому их трудно читать. В идеале результат должен выглядеть так:
userA
Last Password Change: 1/2/34
Password Expires: 1/2/34
Password Inactive: 1/2/34
.....
userB
Last Password Change: 1/2/34
Password Expires: 1/2/34
Password Inactive: 1/2/34
.....
Я был бы признателен за любую помощь / предложения по этому поводу.
Буквальный ответ на ваш вопрос:
#!/bin/bash
users=$(awk -F: '{ print $1}' /etc/passwd)
for value in $users
do
echo $value
chage -l $value
echo "....."
echo ""
done
должен генерировать вывод в виде
userA
Last Password Change: 1/2/34
Password Expires: 1/2/34
Password Inactive: 1/2/34
.....
userB
Last Password Change: 1/2/34
Password Expires: 1/2/34
Password Inactive: 1/2/34
.....
Обратите внимание, что источник информации chage
закодирован в полях файла /etc/shadow
(выраженном как количество дней с 1 января 1970 года).
Анализ этого файла напрямую может быть значительно более эффективным, чем использование chage
и / или других инструментов, которые преобразуют эти поля в читаемый человеком вывод и синтаксический анализ.