Напишите сценарий, который для любого имени, указанного в качестве аргумента, печатает список путей к домашним каталогам людей с таким именем - PullRequest
0 голосов
/ 30 мая 2020

Я так делал и работает. Есть ли другой способ получить такой же результат?

!/bin/bash

for name in $@

do

        awk -v n="$name" -F ':' 'BEGIN{IGNORECASE=1};$5~n{print $6}' /etc/passwd | while read line

        do
                echo $line
        done
done

1 Ответ

1 голос
/ 30 мая 2020

Вы можете сделать это в чистом bash, используя его соответствие регулярному выражению:

#!/usr/bin/env bash
IFS="|"; command eval 'name="$*"'
getent passwd | while IFS= read line; do
    IFS=: read -a fields <<<"$line"
    if [[ ${fields[4]} =~ $name ]]; then
    echo "${fields[5]}"
    fi
done

Строка IFS="|"; command eval 'name="$*"' устанавливает name в аргументы командной строки, разделенные вертикальными чертами, поэтому они работают как альтернативы в регулярном выражении. (См. Bash FAQ 104 для получения подробной информации о синтаксисе этой строки и альтернативах.)

Пример:

$ bash demo.sh "[Ss]ystemd" "[Rr]oot"
/root
/run/systemd
/run/systemd/netif
/run/systemd/resolve
/run/systemd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...