Делаем GUI для Bash скрипта

Март28

bin_bash_script

Иногда для простоты или удобства использования некоторых скриптов необходимо сделать к ним графическую оболочку. Особенно это актуально, если в будущем скриптом придётся пользоваться человеку, плохо знакомому с консолью Linux. Для bash есть несколько альтернативных вариантов создания GUI. Я остановил свой выбор на zenity.

Ставится на ubuntu она стандартно, из репозиториев:

sudo apt-get install zenity

Дальше мы получаем довольно мощный инструмент для создания диалоговых окон. В данном примере, сделаем GUI скрипту для просмотра логов с различных серверов, находящихся одной локальной сети. Рассмотрим пример просмотра логов с 2х сереров: nginx и apache2.

Все основные моменты вроде бы прокомментировал в самом скрипте)

#!/bin/bash
# делаем форму размерами 320 на 300 # и запрашиваем через нее все необходимые нам параметры.
num=$(zenity --width=320 --height=300 --forms --title="History"\
  --text="Введите последнюю цифру IP сервера" \
  --add-entry="10.20.0." \
  --add-list="Для какого сервиса смотрим логи? " --separator="|" --list-values="nginx|apache2" \
  --add-calendar="Выберете дату:" --forms-date-format='%Y-%m-%d'  ) # обрабатываем введенные параметры и присваиваем их переменным.
num_ip=$(echo $num | awk 'BEGIN {FS="|" } { print $1 }')
num_history=$(echo $num | awk 'BEGIN {FS="|" } { print $2 }')
num_date=$(echo $num | awk 'BEGIN {FS="|" } { print $3 }')

# проверяем параментр ip-адресс на корректность.
if [ -z "$num_ip" ]
then
  zenity --error \
         --text="Сервер с таким IP не найден!" \
         --no-wrap ""
  exit 1
fi

dir="$HOME/$num_ip"
mkdir -p $dir
# проверяем условия и выполняем действия исходя из результатов.
if [[ "$num_history" =~ "nginx" ]]; then
  scp feanor184@10.20.0.$num_ip:/var/log/nginx/log_${num_date}* $dir

elif [[ "$num_history" =~ "apache2" ]]; then
  scp feanor184@10.20.0.$num_ip:/var/log/apache2/log_${num_date}* $dir

else zenity --error \
         --text="Не выбран сервис для которого будем смотреть логи" \
         --no-wrap ""
exit 1
fi
# если лог был заархивировал логротейтом, разархивируем его перед чтением.
if [ -e $dir/*.gz ]; then
    gunzip $dir/*
fi
# выводим содержимое лога на экран в удобной форме.
zenity --title Лог с сервера 10.20.0.$num_ip за $num_date --width 800 --height 600 \
  --text-info --filename $dir/*
# удаляем временную директорию
rm -r $dir

Замечание! В данном виде скрипт будет работать только при условии правильной иерархии логирования в папках на серверах. В данном случае я сделал логирование по датам в виде log_$date.

Применение zenity на самом деле может быть очень широкое, тут остается огромное пространство для фантазии в зависимости от потребностей.

Поделиться в соц. сетях


Copyright © 2013-2017. All rights reserved.

Опубликованно Март 28, 2016 by Feanor184 в категории Bash

Об Авторе

Постигаю Linux, учу Python, пытаюсь программировать)

4 комментарий(ев) к записи “Делаем GUI для Bash скрипта

  1. ozi

    Всё же лучше не делать чистое GUI, а использовать, к примеру ncurses обёртку dialog.

    Всё же это более распространённое в дистрибутивах решение.

  2. Oleg

    У меня не работает вот этот фрагмент:
    —add-list=»Для какого сервиса смотрим логи? » —list-values=»nginx|apache2″

    Может какие глобальные настройки должны быть включены?
    версия зенита — 3.4.0

  3. Pingback: Написание скриптов на Bash | Losst

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

=

Перед тем, как оставить комментарий, убедитесь, что вы ознакомились с правилами комментирования этого блога.