Как я могу узнать в сценарии оболочки, существует ли данное имя пользователя в текущей системе?
/etc/passwdи /etc/shadowявляются неполными. Рассмотрим службы каталогов OS X или Linux с аналогичной интеграцией с Active Directory.
Как я могу узнать в сценарии оболочки, существует ли данное имя пользователя в текущей системе?
/etc/passwdи /etc/shadowявляются неполными. Рассмотрим службы каталогов OS X или Linux с аналогичной интеграцией с Active Directory.
Ответы:
Вероятно, одним из самых основных инструментов, которые будут использоваться для этого id.
#!/bin/bash
if id "$1" >/dev/null 2>&1; then
echo "user exists"
else
echo "user does not exist"
fi
Который производит
$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
ifс отрицательным результатом проверки?
id -u $1 1>/dev/null 2>&1; echo $?может быть использован для трубы
getent
Эта команда предназначена для сбора записей для баз данных, которые могут быть поддержаны файлами / etc и различными удаленными службами, такими как LDAP, AD, NIS / Yellow Pages, DNS и тому подобное.
Чтобы выяснить, известно ли имя пользователя одной из служб именования паролей, просто запустите:
getent passwd username
Это работает также с группой, хостами и другими, в зависимости от ОС и реализации.
getent, есть, getentв Mac OS X их нет
fingerРазобрать вывод finger -m <username>. Нет кода ошибки, если, к сожалению, пользователь не найден, но если он не найден, вывод ошибки будет записан. Пока никаких недостатков.
finger -ms <username> 2>&1 1>/dev/null | wc -l
Будет напечатано, 0если пользователь найден (потому что не выводится ошибка), в противном случае большие числа.
chownЗапустите (как и любой пользователь, на удивление):
T=$( mktemp -t foo.XXX ) ; chown <username> $T
Если это не так root, как имя учетной записи недействительно.
Если произойдет сбой как не rootпользователя, проанализируйте возможно локализованный вывод для операции « Недопустимый или недопустимый пользователь» (или эквиваленты). Установите LANGзаранее, чтобы сделать это надежно.
Я бы сказал, что вы хотели бы полагаться на /etc/passwdподобные программы (например, /etc/shadowдля систем на основе теней; на стороннем замечании некоторые подобные системы могут использовать /etc/master.passwdдругие файлы).
/etc/passwd, Как правило , рассматриваются как абсолютное авторитетное решение о том , существует ли пользователь или нет. Если вы используете какой-либо из других методов, описанных на этой странице, и если эти другие методы указывают на существующего пользователя, но /etc/passwdэто не так, то я бы сказал, что пользователь не существует должным образом в системе, по определению наиболее распространенного стандарта, который программное обеспечение, скорее всего, будет полагаться на.
Тем не менее, я добавлю по-другому, чтобы добавить к смеси некоторых других вариантов, которые могут быть использованы.
ls -l /home | grep ^customUserName$<BR>
echo $?
Очевидно, замените «customuserName» на имя пользователя, которого вы хотите проверить. Замените / home на / users, если это то, что использует ваша система. Это может не найти всех пользователей в / etc / passwd, если не создан домашний каталог для конкретного пользователя, что может произойти, если вы просто импортировали пользователей (то есть строки текста в / etc / passwd) и если домашние каталоги этого не делают получить, если / пока человек не войдет в систему.
idили getentне существует "должным образом" в системе, особенно когда ОП четко указывает, что службы именования быть рассмотренным.
if id -u "$1" >/dev/null 2>&1; then...