Используя bash, я пытаюсь сделать запрос /etc/passwd
для любых пользователей с идентификатором более 1000. Если они существуют, то делайте что-то другое. Я в тупике. Любая помощь приветствуется.
if [ "$(id -u)" -gt "1000" </etc/passwd]; then
do something
else
do something else
fi
Ответы:
Попробуй это:
Первый
grep
ищетpasswd
строки с идентификатором из четырех или более цифр. Второйgrep
отфильтровывает строку с uid 1000. Статус выхода будет 0, если какие-либо строки останутся, 1, если нет.источник
then
строки и т. Д.-Evq
чтобы подавить его вывод.getent passwd
вместо/etc/passwd
файла.Чтобы сделать это в
bash
цикле, я предлагаю использоватьread
иIFS
нравится:источник
Вместо того, чтобы читать
/etc/passwd
напрямую, вы должны использоватьgetent passwd
, это также будет работать, если некоторые из ваших пользователей сохранены в чем-то вроде LDAP или что-то подобное.awk
должен хорошо подходить для формата вывода, разделенного двоеточиями.Это напечатало бы имена пользователей всех пользователей с UID> 1000:
И это было бы просто напечатать,
found
если хотя бы один такой найден:источник
getent passwd | awk -F: '$3 >= 1000 && $3 < 2000 {print $1}'
>= 1000
действительно, похоже, имеет смысл. Вопрос был> 1000
по какой-то причине.nobody
кажется, обычно6553x
или3276x
, так что вы, вероятно, можете немного поднять этот верхний предел.Эта конструкция не имеет особого смысла:
Команда
id
работает независимо от перенаправления ввода. Перенаправление здесь не имеет смысла в любом случае.Вы можете использовать этот конвейер в своем тестовом сравнении. Он покажет вам самый высокий идентификатор пользователя на машине:
Возможно, вы захотите настроить его для некоторых систем, так как может присутствовать
nobody
пользователь с UID65534
.источник
Используя код Тома, это сработало для меня ..
источник