Скрипт для поиска 3 разных пользователей в сети и их распечатки

Скрипт для поиска 3 разных пользователей в сети и их распечатки

Я пытаюсь создать скрипт, в котором пользователь может ввести 3 разных аргумента (имена пользователей), чтобы проверить, находится ли он в сети.

В настоящее время у меня есть, who | grep "^$1"который выводит на экран того, кого ищут, но когда я пытаюсь добавить $2 и $3, например

who | grep "^$1" "^$2" "^$3"

выдает ошибку, говорящую, что нет такого файла или каталога, но работает нормально, когда у меня есть только один аргумент. Есть предложения?

решение1

who | grep -e "^$1" -e "^$2" -e "^$3"следует сделать

решение2

Grep ведет себя по-разному в зависимости от типа используемого движка регулярных выражений. По умолчанию он используетБазовые регулярные выраженияно также может использоватьРасширенные регулярные выраженияс -Eи, в grepверсиях, которые поддерживают эту функцию, Регулярные выражения, совместимые с Perlс -P.

BRE может искать только два шаблона, не больше. Синтаксис:

grep 'pattern1\|pattern2'

ERE и PCRE могут искать произвольное число, в этом отношении их синтаксис одинаков, меняется только флаг опции:

grep -E 'pattern1|pattern2|pattern3|patternN'
grep -P 'pattern1|pattern2|pattern3|patternN'

Итак, в вашем случае вы могли бы сделать что-то вроде:

who | grep -E "^$1|^$2|^$3"

решение3

Я бы рекомендовал сделать что-то вроде этого:

who | awk '{print $1}'

awk выведет первый столбец имен пользователей, которые в данный момент находятся в системе.

Как отметил Тердон, если сузить вопрос до трех аргументов:

who | awk -v one=$1 -v two=$2 -v three=$3 '$1==one||$1==two||$1==three'

Связанный контент