Для цикла и эха в unix

Возможны более быстрые / простые нажатия клавиш, чем это, но с использованием моих ограниченных vi навыков:

  • Перейти к invHn3ion?

     / invHn3ion? 
     
  • Переместить строку вниз

     j 
     
  • Удалить строку

     dd 
     
  • Перейти к первой строке

     1G 
     
  • Удалить строку

     dd 
     
  • Перейти в конец файла

     G 
     
  • Вставить

     p 
     
  • Сохранить

     ZZ 
     
1
16.04.2018, 18:40
2 ответа

Ошибка возникает из-за того, что $( 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
1
27.01.2020, 23:32

Используйте getentдля запроса базы паролей:

getent passwd 101
0
27.01.2020, 23:32

Теги

Похожие вопросы