Intereting Posts
что является правильной формой для «tex file.tex | dvips | ps2pdf»? Bash для эхо-первого позиционирования каждой строки в файл с именем второго Разбить строку без разделителя и сохранить ее в массиве Изменение LAN MAC на маршрутизаторе DD-WRT для обмена Сравните два файла и значения соответствия печати без игнорирования дубликатов Как найти файл с правами на чтение из корневого каталога? Можете ли вы перевести данные стека? Каковы данные? Используя стандартизацию, нужно, чтобы первая строка имела разный размер шрифта OpenSUSE отключил регистрацию root (нет корневого psswd) >> yast, проблемы с конфигурацией Каталоги ссылок в CentOS Доступ к файловой системе Windows из ОС Linux Linux Mint 16 случайно замерзает и зависает всегда после приостановки пробуждения Обновление говорит мне, что у меня уже есть новейшая версия Отобразить диалоговое окно из среды pam_exec при входе в систему? Как отключить IPv6 на OpenBSD?

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 

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

 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