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

Пример 33-13. Игры с анаграммами

Пример 33-13. Игры с анаграммами

#!/bin/bash

# agram.sh: Игры с анаграммами.

# Поиск анаграмм...

LETTERSET=etaoinshrdlu

anagram "$LETTERSET" | # Найти все анаграммы в наборе символов...

grep '.......' | # состоящие, как минимум из 7 символов,

grep '^is' | # начинающиеся с 'is'

grep -v 's$' | # исключая множественное число

grep -v 'ed$' # и глаголы в прошедшем времени

# Здесь используется утилита "anagram"

#+ которая входит в состав пакета "yawl" , разработанного автором.

# http://ibiblio.org/pub/Linux/libs/yawl-0.2.tar.gz

exit 0 # Конец.

bash$ sh agram.sh

islander

isolate

isolead

isotheral

См. также Пример 27-2, Пример 12-18 и Пример A-10.

Для создания блочных комментариев можно использовать "анонимные встроенные документы". См. Пример 17-10.

Попытка вызова утилиты из сценария на машине, где эта утилита отсутствует, потенциально опасна. Для обхода подобных проблем можно воспользоваться утилитой whatis.

CMD=command1 # Основной вариант.

PlanB=command2 # Запасной вариант.

command_test=$(whatis "$CMD" | grep 'nothing appropriate')

# Если 'command1' не найдена в системе, то 'whatis' вернет

#+ "command1: nothing appropriate."

#==> От переводчика: Будьте внимательны! Если у вас локализованная версия whatis

#==> то вывод от нее может отличаться от используемого здесь ('nothing appropriate')

if [[ -z "$command_test" ]] # Проверка наличия утилиты в системе.

then

$CMD option1 option2 # Запуск команды с параметрами.

else # Иначе,

$PlanB #+ запустить command2 (запасной вариант).

fi

Команда run-parts удобна для запуска нескольких сценариев, особенно в комбинации с cron или at.

Было бы неплохо снабдить сценарий графическим интерфейстом X-Window. Для этого можно порекомендовать пакеты Xscript, Xmenu и widtools. Правда, первые два, кажется больше не поддерживаются разработчиками. Зато widtools можно получить здесь.


Пакет widtools (widget tools) требует наличия библиотеки XForms. Кроме того, необходимо слегка подправить Makefile, чтобы этот пакет можно было собрать на типичной Linux-системе. Но хуже всего то, что три из шести виджетов не работают :-(( (segfault).

Для постороения приложений с графическим интерфейсом, можно попробовать Tk, или wish (надстройка над Tcl), PerlTk (Perl с поддержкой Tk), tksh (ksh с поддержкой Tk), XForms4Perl (Perl с поддержкой XForms), Gtk-Perl (Perl с поддержкой Gtk) или PyQt (Python с поддержкой Qt).

Оглавление книги


Генерация: 1.290. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз