Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
··exit 0
}
while getopts "df: r: v: " opt; do
··case $opt in
····d) demovoices list··;;
····f) input="$OPTARG"··;;
····r) rate="-r $OPTARG";;
····v) voice="$OPTARG"··;;
··esac
done
shift $(($OPTIND — 1))
if [$# −eq 0 −a — z "$input"]; then
··$dosay "Hey! You haven't given me any parameters to work with."
··echo "Error: no parameters specified. Specify a file or phrase."
··exit 0
fi
if ["$1" = "demo"]; then
··demovoices
fi
if [! -z "$input"]; then
··$dosay $rate −v "$voice" −f $input
else
··$dosay $rate −v "$voice" "$*"
fi
exit 0
Как это работает
В действительности в системе установлено больше голосов, чем указано в сводке (просто здесь перечислены голоса, оптимизированные для английского языка). Чтобы получить полный список, выполните оригинальную команду say с параметрами −v \?. Ниже приводится сокращенная версия полного списка голосов:
$ say −v \?
Agnes······en_US··# Разве не прекрасно иметь компьютер, который говорит с вами?
Albert···· en_US··# В моем горле живет лягушка. Да, самая настоящая лягушка!
Alex······ en_US··# Многие узнают меня по голосу.
Alice······it_IT··# Привет, меня зовут Алиса, я говорю по-итальянски.
-опущено-
Zarvox···· en_US··# Это похоже на мирную планету.
Zuzana···· cs_CZ··# Добрый день, меня зовут Сюзанна. Я говорю по-чешски.
$
Наши любимые дикторы — Пайп Орган (Pipe Organ, «Мы должны радоваться этому болезненному голосу») и Зарвокс (Zarvox, «Это похоже на мирную планету»).
Очевидно, что на выбор дается очень много голосов. Плюс, у некоторых из них очень неправильное английское произношение. Одно из решений этой проблемы — фильтровать дикторов по "en_" (или другому языку по вашему выбору), чтобы получить только голоса с нужным произношением. Для выбора американского английского языка можно использовать фильтр "en_US", но другие английские голоса тоже стоит послушать. Полный список голосов извлекается в строке .
Мы добавили в конец блока сложную череду подстановок с помощью sed, потому что этот список построен не совсем правильно: он включает имена, состоящие из одного (Fiona) и из двух слов (Bad News), а также дополнительные пробелы для выравнивания вывода по колонкам. Чтобы решить эту проблему, первый пробел в каждой строке заменяется символом подчеркивания, а все остальные пробелы удаляются. Если имя голоса состоит из одного слова, оно будет выглядеть так: "Ralph_", и заключительная подстановка sed удалит любые завершающие подчеркивания. В конце процесса остаются имена из двух слов с подчеркиванием, поэтому их нужно исправить перед выводом на экран. Однако код имеет интересный побочный эффект, в результате которого цикл while проще написать, использовав в качестве разделителя пробел.
Другой интересный блок , где каждый голос представляет себя, выполняется, когда данный сценарий вызывается как sayit demo.
Все это очень просто, нужно лишь разобраться, как работает сама команда say.
Запуск сценария
Так как этот сценарий воспроизводит речь, мы немногое можем показать в книге, а поскольку мы пока не выпустили аудиверсию «Сценариев командной оболочки» (вы сумеете представить себе все то, чего нельзя показать на картинке?), вам придется поэкспериментировать самостоятельно. Однако сценарий может перечислить и воспроизвести все установленные голоса, как показано в листинге 13.11.
Результаты
Листинг 13.11.Запуск сценария sayit для вывода списка поддерживаемых голосов и их озвучивания
$ sayit −d
Available voices: Agnes, Albert, Alex, Bad News, Bahh, Bells, Boing,
Bruce, Bubbles, Cellos, Daniel, Deranged, Fred, Good News, Hysterical,
Junior, Karen, Kathy, Moira, Pipe Organ, Princess, Ralph, Samantha,
Tessa, Trinoids, Veena, Vicki, Victoria, Whisper, Zarvox
HANDY TIP: use "sayit.sh demo" to hear all the different voices
$ sayit "Yo, yo, dog! Whassup?"
$ sayit −v "Pipe Organ" −r 60 "Yo, yo, dog! Whassup?"
$ sayit −v "Ralph" −r 80 −f alice.txt
Усовершенствование сценария
Детальное исследование вывода команды say −v \? показало, что существует по меньшей мере один голос, для которого неправильно указан код языка. Для имени Fiona указан код en-scotland, а не en_scotland, что нарушает единообразие (учитывая, что для имени Moira указан код языка en_IE, а не en-irish или en-ireland). Вы легко могли бы усовершенствовать сценарий, чтобы он обрабатывал коды обоих видов: en_ и en-. В остальном поэкспериментируйте сами и подумайте, когда было бы полезно иметь сценарий или демона, общающегося с вами.
Глава 14. ImageMagick и обработка графических файлов
Командная строка в Linux обладает необычайно широким диапазоном возможностей, но так как она имеет текстовый интерфейс, то не позволяет выполнять сколько-нибудь сложную обработку графики. Или это не так?
Оказывается, практически в любом окружении командной строки, от OSX до Linux и многих других систем, доступен необычайно мощный пакет утилит командной строки, ImageMagick. Чтобы опробовать сценарии в этой главе, вам придется загрузить и установить пакет с сайта http://www.imagemagick.org/или воспользоваться системным диспетчером пакетов, таким как apt, yum или brew, если вы этого не сделали, когда знакомились со сценарием № 91 из главы 13.
Так как утилиты предназначены для работы в командной строке, они занимают очень мало дискового пространства, что-то около 19 Мбайт (для Windows-версии). Вы можете также получить исходный код пакета, если хотите посмотреть, как выглядит внутри такое мощное и гибкое программное обеспечение. И снова открытое ПО побеждает.
№ 94. Интеллектуальный анализатор размеров изображений
Команда file позволяет определять типы файлов и в некоторых случаях даже размеры изображений. Но очень часто она терпит неудачу:
$ file * | head -4
100_0399.png:····PNG image data, 1024 x 768, 8-bit/color RGBA, non-interlaced
8t grade art1.jpeg:··JPEG image data, JFIF standard 1.01
99icon.gif:··········GIF image data, version 89a, 143 x 163
Angel.jpg:·········· JPEG image data, JFIF standard 1.01
Файлы PNG и GIF не вызывают проблем, но как быть с не менее распространенными файлами JPEG? Команда file не смогла определить размеры изображений. Какая досада!
Код
Давайте устраним эту проблему с помощью сценария (листинг 14.1), который использует инструмент identify из пакета ImageMagick, чтобы точно определить размеры изображения.
Листинг 14.1.Сценарий imagesize
#!/bin/bash
# imagesize — выводит информацию о файле изображения и определяет размеры,
#·· используя утилиту identify из пакета ImageMagick.
for name
do
··identify −format "%f: %G with %k colors.\n" "$name"
Интервал:
Закладка: