Самый простой способ получить список пользователей, которые не входили в систему за последние 15 дней, вместо того, чтобы получать его из / home
использует команду lastlog
lastlog -b 15
Просмотр строки вывода:
alumno1 pts / 14 172.17.1.114 Сб, 22 октября 22:18:57 +0100 2016
Если вам просто нужно имя (1-е поле):
lastlog -b 15 | sed "1d" | awk ' { print $1 } '
( sed "1d"
если для удаления заголовка lastlog
)
From man lastlog :
ОПЦИИ К команде lastlog применяются следующие параметры:
-b, --before DAYS Печатать только записи lastlog старше, чем DAYS.
Если пользователь никогда не входил в систему, вместо порта и времени будет отображаться сообщение ** Никогда не входил **.
Что касается фактического скрипта для проверки группы:
#!/bin/bash
getent group alumnos > /dev/null
if [ $? -ne 0 ]
then
echo "group alumnos does not exist"
exit 1
fi
for i in ` lastlog -b 15 | sed "1d" | awk ' { print $1 } '`
do
if [ `id -ng $i` == "alumnos" ]
then
echo $i
fi
done
exit 0
где:
переменная i
будет перебирать имена всех пользователей, указанные в lastlog
id -ng user
дает имя группы пользователя, на которую указывает текущая итерация «$ i», чтобы выпускники группы getent
проверяли наличие группы
Что касается упомянутой вами ошибки if
; когда grep
ничего не находит, он пропускает операнд и затем становится пустым; отсюда и ошибка.Один из приемов заключается в выполнении сравнения строк с дополнением «x», как в:
if [ "x"$i == "xstring" ]
then
...
Другая альтернатива проверке существования групповых выпускников:
if [ $(grep "^alumnos:" /etc/group) -e ]
then
echo "No group alumnos"
exit 1
fi
Еще одна альтернатива для проверки наличия пользователя с несколькими группами:
groups user | grep alumnos