Подробнее о сценарии оболочки: добавление условий и графического интерфейса

В нашей последней статьи мы рассмотрели несколько простых в использовании приемов создания простых, но полезных сценариев оболочки. Теперь мы немного углубимся и добавим им интеллекта.

Использование условных выражений

Если вы помните сценарий, который мы написали в прошлый раз, он запускал серию команд, которые использовали Pandoc для создания четырех версий документа Markdown (в каждой из HTML, DOCX, ODT и ePub). Но это было все или ничего ... либо мы использовали сам Pandoc, чтобы делать их по одному, либо все. Что, если бы мы хотели выбирать?

Это просто с использованием условных операторов, которые по сути являются операторами " если X - это, то сделай это". Давайте посмотрим на сценарий в том виде, в каком он был у нас:

Предположим, мы хотим иметь возможность выбрать один из перечисленных выше элементов в командной строке или выполнить все из них. Быстрая модификация скрипта pandoc-pub.sh, подобная этому, позволит добиться именно этого:

Первое, что мы сделали здесь, это дали две переменные, которые мы хотим получить из имен командной строки: file (который является исходным файлом Markdown) и export (который является формат, в который мы хотим экспортировать. Итак, теперь мы можем выбрать то, что мы хотим сгенерировать, используя:

Но как насчет всего шебанга? Мы могли бы сделать это в прошлый раз, но не сейчас? Что ж, если мы немного забегаем вперед, мы должны учесть случай, когда мы (или другой пользователь) вводим что-то помимо четырех вариантов, указанных выше - в этом случае почему бы не экспортировать все? Добавьте еще один бит кода следующим образом:

Теперь, если мы ничего не введем после имени файла в командной строке (или не введем неправильную информацию), этот сценарий просто сделает безопасную вещь и сгенерирует все форматы.

Добавление графического интерфейса

Но что, если в последнем случае вы не хотите, чтобы он просто генерировал все, а делал что-то более полезное. Мы могли бы добавить еще

оператор для генерации всех форматов, когда в командной строке вводится "все", и изменить оператор, чтобы напечатать некоторый текст справки:

Но будет более полезным, если в случае пустого или неправильного флага мы отобразим графический интерфейс, чтобы помочь пользователю в этом. Во-первых, нам нужно установить набор инструментов под названием Zenity, чтобы помочь нам. Вы можете установить это из Центра программного обеспечения или использовать следующую команду:

Затем нам нужно будет использовать Zenity, чтобы создать для нас диалог. Нам нужно что-то, где пользователь может выбрать все или некоторые из доступных у нас параметров… флажки здесь звучат правильно. Итак, мы создаем диалог Zenity с флажками, представляющими все наши варианты:

зенити-диалог

Вы можете увидеть, как построена указанная выше команда Zenity, прочитав руководство здесь. Затем нам нужно получить список того, что проверяет пользователь, и присвоить его переменной. Добавление имени переменной, заключение команды Zenity в круглые скобки и добавление знака "$" укажут оболочке заменить команду внутри ее результатом, когда это будет сделано:

Теперь у нас есть переменная "$ choices", которая содержит список (по умолчанию разделенный знаком "|") всех выбранных опций. Нам нужно будет проверить, содержит ли этот список какой-либо из форматов, которые мы планируем обрабатывать, используя "=~" вместо "=="(в данном случае это проверяет, содержит ли что-то что-то еще)… для пример:

Наконец, быстрое изменение скрипта покажет это диалоговое окно, если формат не указан, а затем запустите соответствующую команду Pandoc, когда этот параметр отмечен в диалоговом окне:

Просто так, персонализированное приложение с графическим интерфейсом и параметрами командной строки.