if statement user user id в etc / passwd?

Используя bash, я пытаюсь запросить /etc/passwd для всех пользователей с идентификатором более 1000. Если они существуют, что-то делать, то сделайте что-нибудь еще. Я в тупике. Любая помощь приветствуется.

 if [ "$(id -u)" -gt "1000" </etc/passwd]; then do something else do something else fi 

5 Solutions collect form web for “if statement user user id в etc / passwd?”

Попробуй это:

 if grep -E '^[^:]*:[^:]*:[^:]{4}' /etc/passwd | grep -Evq '^[^:]*:[^:]*:1000:' 

Первый grep ищет passwd для строк с uid четырех или более цифр. Второй grep отфильтровывает линию с uid 1000. Статус выхода будет 0, если строки останутся, 1 если нет.

Чтобы сделать это в цикле bash , я предлагаю использовать read и IFS например:

 #!/usr/bin/env bash while IFS=':' read -r user passwd uid gid comment home shell; do if [ "$uid" -gt 1000 ] ; then echo GT $user else echo LT $user fi done < /etc/passwd 

Вместо прямого чтения /etc/passwd вы должны использовать getent passwd , который также будет работать, если некоторые из ваших пользователей будут сохранены в чем-то вроде LDAP или таких. awk должен быть хорошо подходит для формата вывода данных, разделенного двоеточием.

Это будет печатать имена пользователей всех пользователей с UID> 1000:

 getent passwd | awk -F: '$3 > 1000 {print $1}' 

И это будет просто напечатано, если найдется хотя бы одно такое:

 getent passwd | awk -F: '$3 > 1000 {print "found"; exit}' 

Эта конструкция не имеет большого смысла:

 "$(id -u)" -gt "1000" </etc/passwd 

Команда id работает независимо от перенаправления ввода. В любом случае перенаправление не имеет смысла.

Вы можете использовать этот конвейер в своем тестовом сравнении. Он покажет вам самый высокий идентификатор пользователя на машине:

 cat /etc/passwd | awk -F: '{print $3}' | sort -n | tail -n1 

Вы можете настроить его для некоторых систем, так как может быть nobody у которого есть UID 65534 .

Используя код Тома, это сработало для меня.

 #!/bin/sh if grep -E '^[^:]*:[^:]*:[^:]{4}' /etc/passwd | grep -Evq '^[^:]*:[^:]*:1000:' then echo "exists" else echo "not exists" fi 
  • Потерянный пароль для пользователя на сервере Linux: как его сбросить?
  • Запретить изменение паролей
  • команда для получения имени пользователя через id
  • Может ли пользователь AIX, который появляется в etc / group, но не etc / passwd, все еще регистрируется на сервере?
  • установить дату истечения срока действия учетной записи в будущем
  • Будет ли всегда пара одинаковых UID и GID?
  • Почему введенный пароль не отображается?
  • Разница между ! vs !! vs * в / etc / shadow
  • Не удалось восстановить потерянный логин
  • show вводит новый пароль в команде unix "passwd"
  • Пользователь без полномочий root не может изменять пароль Samba
  • Interesting Posts

    Как сопоставить строку с символами в виде grep?

    Какие команды имеют параметр -h для чтения человеком и как его включить по умолчанию с переменной w / env?

    Откуда появился Редхат?

    Как я могу превратить инструмент `file` в предикат для` find`?

    Не удается очистить старые ядра (проблемы с зависимостями), но / boot вне места

    Как я могу разделить тома в обычный файл без цикла?

    sshd не запускается после загрузки встроенного linux, построенного с помощью buildroot?

    Как заставить кнопки навигации и расширения появляться во всплывающем окне в Chrome?

    Как установить PulseAudio в группы?

    Можно ли отслеживать отправленные письма?

    Справка по установке в Arch Linux

    удаление странных символов из приглашения zsh

    Можно ли добавить что-то не-доменное имя без имени хоста в качестве псевдонима хоста?

    Отправка файлов через Samba с помощью командной строки

    Ubuntu 12.04: случайные зависания

    Linux и Unix - лучшая ОС в мире.