Ранее уже рассматривалась тема создания скриптов с графическим интерфейсом на базе утилиты kdialog, являющейся частью KDE. Но пользователям сред на базе GTK+ не всегда есть смысл устанавливать библиотеки KDE и потому им можно порекомендовать различные альтернативы на базе GTK+. Ниже будет рассмотрена одна из таких альтернатив - Zenity.
Zenity есть в большинстве современных дистрибутивов. Если же нет - его не сложно установить. Например в Debian/Ubuntu это делается командой:
apt-get install zenity
Впринципе для того чтобы разобраться с zenity вполне достаточно чтения man-страницы, однако всё же рассмотрим применение zenity на примере задач из предыдущей статьи.
Задача #1: скрипт для перекодирования файлов
Тут тоже ничего сложного, нам нужно запросить имя входного файла, имя выходного файла и кодировку входного файла. Опять же переходим сразу к готовму скрипту:
#!/bin/sh # Получаем имя исходного файла SRCFILENAME=`zenity --file-selection --title='Выберите файл, который надо перекодировать'` # Если имя файла не пустое идём дальше if ! [ -z ${SRCFILENAME} ]; then # Получаем имя конечного файла DSTFILENAME=`zenity --file-selection --save --confirm-overwrite --title='Выберите имя перекодированного файла'` # Если имя файла не пустое идём дальше if ! [ -z ${DSTFILENAME} ]; then # Если конечный и начальный файл один и тот же - # Завершаем скрипт с сообщением об ошибке if [ ${SRCFILENAME} = ${DSTFILENAME} ]; then zenity --error --text='Нельзя перекодировать файл сам в себя!' exit 1 fi # Запрашиваем кодировку исходного файла # Список доступных кодировок получается из вывода команды iconv -l ENCODING=`iconv -l | sed 's/\/\///'| awk '{ print $1;}'|sort |zenity --list --column='Кодировка' --text='Выберите кодировку исходного файла' --title='Выбор кодировки'` # Если кодировка выбрана - перекодируем файл и сообщаем об # успешном завершении скрипта if ! [ -z ${ENCODING} ]; then iconv -f ${ENCODING} -t utf-8 ${SRCFILENAME} > ${DSTFILENAME} zenity --info --text='Перекодирование выполнено!' fi fi fi
Видно, что скрипт получился достаточно простой, так что можно перейти к следующей задаче.
Задача #2: Проверка доступности сетевого ресурса.
Задача: периодически проверять доступность сетевого ресурса и уведомлять пользователя о его пропадании и последующем появлении. Тут нужно организовать вечный цикл и внутри него проверять доступность/недоступность ресурса. Скрипт будет выглядеть примерно вот так:
#!/bin/sh # Ресурс, доступность которого нужно проверять. PINGRESOURCE="ylsoftware.com" # Файл, который будет создаваться если ресурс недоступен LOCKFILE="/tmp/${PINGRESOURCE}.lock" # Интервал (в секундах) между проверками CHECKTIME=60 # Организуем бесконечный цикл while true; do # Если ресурс не доступен if (! ping -c 3 ${PINGRESOURCE} > /dev/null 2> /dev/null) then # Проверяем наличие временного файла if (! test -f ${LOCKFILE}) then # Если временный файл не существует - создаём его # и оповещаем пользователя touch ${LOCKFILE} zenity --error --text='Ресурс недоступен!' fi # Если же доступен else # Проверяем наличие временного файл if (test -f ${LOCKFILE}) then # Если файл существует - удаляем его и оповещаем # Пользователя о доступности rm ${LOCKFILE} zenity --info --text='Ресурс доступен!' fi fi sleep ${CHECKTIME} done
Дополнительные комментарии тут излишни. Как уже говорилось выше - более подробную информацию желающие могут подчерпнуть из man-страницы zenity.
Приятной работы!
Ссылки:
Ruslan 2008-11-19 02:28:53 (#)
$ sh 1.sh
1.sh: line 20: syntax error near unexpected token `fi'
1.sh: line 20: ` fi'