Ваше запитання трохи розпливчасте, але всі відповіді поки що вирішують проблему розбору рядка passwd у ваш формат. Однак ваша пропозиція щодо використання grep
змушує мене думати, що вам цікаво також вибрати конкретний запис, а не надрукувати рядок для кожного користувача в системі.
grep
Це, безумовно, одна з можливостей для цього, але я вважаю, що getent
команда є більш чистим способом отримання записів з файлу passwd.
Оскільки існує так багато awk
рішень на основі, я намагався sed
замість цього зробити розбір . Це просто, щоб мати більш колоритний набір відповідей, я б не вважав це кращим чи простішим для завдання.
#!/bin/bash
if [[ $# != 1 ]]; then
echo "$0: wrong number of arguments"
echo -n "Usage: "
echo "$0 {username | UID}"
fi
getent passwd "$1" \
| sed 's/\(.*\):.*:.*:.*:\(.*\):.*:.*$/User \1 is \2/'
Розширення сценарію для отримання довільної кількості аргументів залишається вправою для читача.
awk
(або Perl, Python, ...)?