Читаем Искусство программирования на языке сценариев командной оболочки полностью

then # то существует и соответствующий процесс.

echo "Исполняемый файл процесса #$1: $exe_file."

else

echo "Нет такого процесса."

fi

# В большинстве случаев, этот, довольно сложный сценарий, может быть заменен командой

# ps ax | grep $1 | awk '{ print $5 }'

# В большинстве, но не всегда...

# поскольку пятое поле листинга,выдаваемого командой 'ps', это argv[0] процесса,

# а не путь к исполняемому файлу.

#

# Однако, оба следующих варианта должны работать безотказно.

# find /proc/$1/exe -printf '%l\n'

# lsof -aFn -p $1 -d txt | sed -ne 's/^n//p'

# Автор последнего комментария: Stephane Chazelas.

exit 0

<p><strong>Пример 27-2. Проверка состояния соединения</strong></p>

#!/bin/bash

PROCNAME=pppd # демон ppp

PROCFILENAME=status # Что смотреть.

NOTCONNECTED=65

INTERVAL=2 # Период проверки -- раз в 2 секунды.

pidno=$( ps ax | grep -v "ps ax" | grep -v grep | grep $PROCNAME | awk '{ print $1 }' )

# Найти идентификатор процесса 'pppd', 'ppp daemon'.

# По пути убрать из листинга записи о процессах, порожденных сценарием.

#

# Однако, как отмечает Oleg Philon,

#+ Эта последовательность команд может быть заменена командой "pidof".

# pidno=$( pidof $PROCNAME )

#

# Мораль:

#+ Когда последовательность команд становится слишком сложной,

#+ это повод к тому, чтобы поискать более короткий вариант.

if [ -z "$pidno" ] # Если получилась пустая строка, значит процесс не запущен.

then

echo "Соединение не установлено."

exit $NOTCONNECTED

else

echo "Соединение установлено."; echo

fi

while [ true ] # Бесконечный цикл.

do

if [ ! -e "/proc/$pidno/$PROCFILENAME" ]

# Пока работает процесс, файл "status" существует.

then

echo "Соединение разорвано."

exit $NOTCONNECTED

fi

netstat -s | grep "packets received" # Получить некоторые сведения о соединении.

netstat -s | grep "packets delivered"

sleep $INTERVAL

echo; echo

done

exit 0

# Как обычно, этот сценарий может быть остановлен комбинацией клавиш Control-C.

# Упражнение:

# ----------

# Добавьте возможность завершения работы сценария, по нажатии на клавишу "q".

# Это сделает скрипт более жружественным к пользователю.

Будьте предельно осторожны при работе с файловой системой /proc, так как попытка записи в некоторые файлы может повредить файловую систему или привести к краху системы.

<p><strong>Глава 28. /dev/zero и /dev/null</strong></p>

/dev/null

Псевдоустройство /dev/null -- это, своего рода, "черная дыра" в системе. Это, пожалуй, самый близкий смысловой эквивалент. Все, что записывается в этот файл, "исчезает" навсегда. Попытки записи или чтения из этого файла не дают, ровным счетом, никакого результата. Тем не менее, псевдоустройство /dev/null вполне может пригодиться.

Подавление вывода на stdout.

cat $filename >/dev/null

# Содержимое файла $filename не появится на stdout.

Подавление вывода на stderr (from Пример 12-2).

rm $badname 2>/dev/null

# Сообщение об ошибке "уйдет в никуда".

Подавление вывода, как на stdout, так и на stderr.

cat $filename 2>/dev/null >/dev/null

# Если "$filename" не будет найден, то вы не увидите сообщения об ошибке.

# Если "$filename" существует, то вы не увидите его содержимое.

# Таким образом, вышеприведенная команда ничего не выводит на экран.

#

# Такая методика бывает полезной, когда необходимо лишь проверить код завершения команды

#+ и нежелательно выводить результат работы команды на экран.

#

# cat $filename &>/dev/null

# дает тот же результат, автор примечания Baris Cicek.

Удаление содержимого файла, сохраняя, при этом, сам файл, со всеми его правами доступа (очистка файла) (из Пример 2-1 и Пример 2-2):

cat /dev/null > /var/log/messages

# : > /var/log/messages дает тот же эффект, но не порождает дочерний процесс.

cat /dev/null > /var/log/wtmp

Автоматическая очистка содержимого системного журнала (logfile) (особенно хороша для борьбы с надоедливыми рекламными идентификационными файлами ("cookies")):

<p><strong>Пример 28-1. Удаление cookie-файлов</strong></p>

if [ -f ~/.netscape/cookies ] # Удалить, если имеются.

then

rm -f ~/.netscape/cookies

fi

ln -s /dev/null ~/.netscape/cookies

# Теперь, все cookie-файлы, вместо того, чтобы сохраняться на диске, будут "вылетать в трубу".

/dev/zero

Подобно псевдоустройству /dev/null, /dev/zero так же является псевдоустройством, с той лишь разницей, что содержит нули. Информация, выводимая в этот файл, так же бесследно исчезает. Чтение нулей из этого файла может вызвать некоторые затруднения, однако это можно сделать, к примеру, с помощью команды od или шестнадцатиричного редактора. В основном, /dev/zero используется для создания заготовки файла с заданой длиной.

<p><strong>Пример 28-2. Создание файла подкачки (swapfile), с помощью /dev/zero</strong></p>

#!/bin/bash

# Создание файла подкачки.

# Этот сценарий должен запускаться с правами root.

ROOT_UID=0 # Для root -- $UID 0.

E_WRONG_USER=65 # Не root?

FILE=/swap

BLOCKSIZE=1024

MINBLOCKS=40

SUCCESS=0

if [ "$UID" -ne "$ROOT_UID" ]

then

echo; echo "Этот сценарий должен запускаться с правами root."; echo

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

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

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

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

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

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

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

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

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