Ваше запитання трохи розпливчасте, але всі відповіді поки що вирішують проблему розбору рядка 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, ...)?