Книга: Искусство программирования на языке сценариев командной оболочки
Пример 22-7. Настоящее имя пользователя
Пример 22-7. Настоящее имя пользователя
#!/bin/bash
# По имени пользователя получить его "настоящее имя" из /etc/passwd.
ARGCOUNT=1 # Ожидается один аргумент.
E_WRONGARGS=65
file=/etc/passwd
pattern=$1
if [ $# -ne "$ARGCOUNT" ]
then
echo "Порядок использования: `basename $0` USERNAME"
exit $E_WRONGARGS
fi
file_excerpt () # Производит поиск в файле по заданному шаблону, выводит требуемую часть строки.
{
while read line
do
echo "$line" | grep $1 | awk -F":" '{ print $5 }' # Указывет awk использовать ":" как разделитель полей.
done
} <$file # Подменить stdin для функции.
file_excerpt $pattern
# Да, этот сценарий можно уменьшить до
# grep PATTERN /etc/passwd | awk -F":" '{ print $5 }'
# или
# awk -F: '/PATTERN/ {print $5}'
# или
# awk -F: '($1 == "username") { print $5 }'
# Однако, это было бы не так поучительно.
exit 0
Ниже приводится альтернативный, и возможно менее запутанный, способ перенаправления ввода для функций. Он заключается в использовании перенаправления ввода для блока кода, заключенного в фигурные скобки, в пределах функции.
# Вместо:
Function ()
{
...
} < file
# Попробуйте так:
Function ()
{
{
...
} < file
}
# Похожий вариант,
Function () # Тоже работает.
{
{
echo $*
} | tr a b
}
Function () # Этот вариант не работает.
{
echo $*
} | tr a b # Наличие вложенного блока кода -- обязательное условие.
# Спасибо S.C.
- Пример установочного скрипта
- Пример из практики
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Сохранение информации о пользователях при миграции
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Реальный (RID) и эффективный (EUID) идентификаторы пользователя
- Примеры получения статистики
- Пример применения метода «пять почему»
- Единое имя файла параметров InterBase
- Новое имя базы данных пользователей
- 12. Лекция: Создание приложений с графическим интерфейсом пользователя.
- Пример 12-8. Частота встречаемости отдельных слов