Возможны более быстрые / простые нажатия клавиш, чем это, но с использованием моих ограниченных vi
навыков:
Перейти к invHn3ion?
/ invHn3ion?
Переместить строку вниз
j
Удалить строку
dd
Перейти к первой строке
1G
Удалить строку
dd
Перейти в конец файла
G
Вставить
p
Сохранить
ZZ
Ошибка возникает из-за того, что $( echo id -g $user )
будет развернуто в слова id -g username
. Это нельзя сравнивать с 101
, так как расширение не заключено в кавычки.
Чтобы сравнить вывод id -g "$user"
(, обратите внимание на двойные кавычки ), используйте
if [ "$( id -g "$user" )" = "101" ]
Внутри [... ]
вы должны использовать один =
для сравнения строк. В оболочках с [[... ]]
вы можете использовать==
:
if [[ $( id -g "$user" ) == "101" ]]
Здесь заключение команды подстановки в кавычки не требуется, но это необходимо, если вы используете [... ]
.
Идиоматический способ выполнения такого рода задач состоит в том, чтобы не сохранять выходные данные конвейера who
в переменной, а передавать их непосредственно в цикл:
who | awk '{ print $1 }' | sort -u |
while read user; do
if [ "$( id -g "$user" )" = "101" ]; then
echo 'Got it'
fi
done
Используйте getent
для запроса базы паролей:
getent passwd 101