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


Программирование на языке сценариев командной оболочки - стр. 258


# В большинстве случаев, этот, довольно сложный сценарий, может быть заменен командой # 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

Пример 27-2. Проверка состояния соединения

#!/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". # Это сделает скрипт более жружественным к пользователю.




- Начало -  - Назад -  - Вперед -