Читаем Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание полностью

К счастью, некоторые из этих несоответствий в данном конкретном сценарии можно обойти, использовав флаг cu, что позволяет получить единообразный вывод, включающий в себя владельца процесса, полное имя команды и — что особенно важно — числовой идентификатор процесса.

Кроме того, данный сценарий — первый, в котором мы по-настоящему используем всю мощь команды getopts, позволяющей работать с самыми разными параметрами командной строки и даже подставлять значения по умолчанию. Сценарий в листинге 6.6 имеет четыре начальных флага, три из которых имеют обязательные аргументы: −s SIGNAL, −u USER, −t TTY и −n. Вы увидите их в первом блоке кода.

<p>Код</p>

Листинг 6.6. Сценарий killall

#!/bin/bash

# killall — посылает указанный сигнал всем процессам, имена которых

#·· соответствуют заданному шаблону.

# По умолчанию завершает только процессы, принадлежащие текущему

#·· пользователю, только если не запущен с привилегиями root.

#·· Используйте −s SIGNAL, чтобы указать сигнал, посылаемый процессам;

#·· −u USER, чтобы указать пользователя; −t TTY, чтобы указать устройство

#·· tty; и −n, чтобы только получить список процессов, которые могли бы

#·· быть завершены, но без их завершения.

signal="-INT"······# Сигнал по умолчанию — прерывание.

user=""·· tty=""·· donothing=0

while getopts "s: u: t: n" opt; do

··case "$opt" in

····# Обратите внимание на хитрый трюк ниже: фактическая команда kill ожидает

····#·· получить имя сигнала в виде −SIGNAL, но сценарий требует

····#·· указать его без дефиса: SIGNAL, поэтому мы просто

····#·· добавляем "-" в начало полученного имени сигнала.

····s) signal="-$OPTARG";;;

····u) if [! -z "$tty"]; then

··········# Логическая ошибка: нельзя одновременно указать пользователя

··········#·· и устройство TTY

··········echo "$0: error: −u and −t are mutually exclusive." >&2

··········exit 1

········fi

········user=$OPTARG;;;

····t) if [! -z "$user"]; then

··········echo "$0: error: −u and −t are mutually exclusive." >&2

··········exit 1

········fi

········tty=$2;;;

····n) donothing=1;;;

····?) echo "Usage: $0 [-s signal] [-u user|-t tty] [-n] pattern" >&2

········exit 1

··esac

done

# Завершить обработку всех начальных флагов с помощью getopts…

shift $(($OPTIND — 1))

# Если пользователь не указал начальных аргументов

#·· (предыдущая проверка в ветке —?)

if [$# −eq 0]; then

··echo "Usage: $0 [-s signal] [-u user|-t tty] [-n] pattern" >&2

··exit 1

fi

# Теперь нужно создать список числовых идентификаторов процессов,

#·· соответствующих заданному устройству TTY, пользователю или текущему

#·· пользователю.

if [! -z "$tty"]; then

··pids=$(ps cu −t $tty | awk "/ $1$/ { print \$2 }")

elif [! -z "$user"]; then

··pids=$(ps cu −U $user | awk "/ $1$/ { print \$2 }")

else

··pids=$(ps cu −U ${USER:-LOGNAME} | awk "/ $1$/ { print \$2 }")

fi

# Нет совпадений? Тогда все просто!

if [-z "$pids"]; then

··echo "$0: no processes match pattern $1" >&2

··exit 1

Перейти на страницу:

Все книги серии Для профессионалов

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание

Сценарии командной оболочки помогают системным администраторам и программистам автоматизировать рутинные задачи с тех самых пор, как появились первые компьютеры. С момента выхода первого издания этой книги в 2004 году многое изменилось, однако командная оболочка bash только упрочила свои лидирующие позиции. Поэтому умение использовать все ее возможности становится насущной необходимостью для системных администраторов, инженеров и энтузиастов. В этой книге описываются типичные проблемы, с которыми можно столкнуться, например, при сборке программного обеспечения или координации действий других программ. А решения даются так, что их легко можно взять за основу и экстраполировать на другие схожие задачи.Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.

Брендон Перри , Дейв Тейлор

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных