Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание

Тут можно читать онлайн Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Питер, год 2017. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
  • Автор:
  • Жанр:
  • Издательство:
    Питер
  • Год:
    2017
  • Город:
    СПб.
  • ISBN:
    978-5-496-03029-8
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - описание и краткое содержание, автор Дейв Тейлор, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Сценарии командной оболочки помогают системным администраторам и программистам автоматизировать рутинные задачи с тех самых пор, как появились первые компьютеры. С момента выхода первого издания этой книги в 2004 году многое изменилось, однако командная оболочка bash только упрочила свои лидирующие позиции. Поэтому умение использовать все ее возможности становится насущной необходимостью для системных администраторов, инженеров и энтузиастов. В этой книге описываются типичные проблемы, с которыми можно столкнуться, например, при сборке программного обеспечения или координации действий других программ. А решения даются так, что их легко можно взять за основу и экстраполировать на другие схожие задачи.
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать книгу онлайн бесплатно, автор Дейв Тейлор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Guess a letter: m

* Nope, "m" does not appear in the word.

guessed: eioum, steps from gallows: 5, word so far: −e-e-iou-

Guess a letter: n

* Great! The letter "n" appears in the word!

guessed: eioumn, steps from gallows: 5, word so far: −en-en-iou-

Guess a letter: r

* Nope, "r" does not appear in the word.

guessed: eioumnr, steps from gallows: 4, word so far: −en-en-iou-

Guess a letter: s

* Great! The letter "s" appears in the word!

guessed: eioumnrs, steps from gallows: 4, word so far: sen-en-ious-

Guess a letter: t

* Great! The letter "t" appears in the word!

guessed: eioumnrst, steps from gallows: 4, word so far: sententious-

Guess a letter: l

* Great! The letter "l" appears in the word!

guessed: eioumnrstl, steps from gallows: 4, word so far: sententiousl-

Guess a letter: y

** You’ve been pardoned!! Well done! The word was "sententiously".

*** New Game! ***

steps from gallows: 6, word so far: —-

Guess a letter: quit

Усовершенствование сценария

В сценарии командной оболочки трудно реализовать вывод графического изображения человечка на виселице, поэтому мы использовали альтернативу: подсчет «шагов до эшафота». Однако вы настроены серьезно, попробуйте использовать серии предопределенных фрагментов текстовой псевдографики, по одному для каждого шага, и выводить их по мере игры. Или поищите какую-нибудь другую метафору, не связанную с насилием!

Обратите внимание, что одно и то же слово может быть выбрано несколько раз в одном сеансе игры, хотя со списком по умолчанию, насчитывающим 2882 варианта, это маловероятно. Однако если вы все же беспокоитесь, можно добавить переменную для хранения всех использованных слов и при выборе нового сверяться с ней.

Наконец, попробуйте сортировать угаданные буквы в переменной guessed в алфавитном порядке. Это можно сделать несколькими способами, но мы советуем попробовать связку sed|sort.

№ 85. Угадай столицу

Теперь, когда у нас есть инструмент выбора случайной строки из файла, перед нами открываются широкие перспективы в создании самых разных игр-викторин. Мы поместили в список столицы всех 50 штатов США, доступный для загрузки по адресу: http://www.nostarch.com/wcss2/. Сохраните файл state.capitals.txt в своем каталоге /usr/lib/games . Сценарий в листинге 12.5 выбирает случайную строку из файла, выводит название штата и предлагает пользователю ввести название его столицы.

Код

Листинг 12.5.Сценарий states? реализующий игру «Угадай столицу»

#!/bin/bash

# states — игра "Угадай столицу". Требует наличия файла со списком

#·· штатов и их столиц state.capitals.txt.

db="/usr/lib/games/state.capitals.txt" # Формат: Штат[табуляция]Город.

if [! -r "$db"]; then

··echo "$0: Can't open $db for reading." >&2

··echo "(get state.capitals.txt" >&2

··echo "save the file as $db and you're ready to play!)" >&2

··exit 1

fi

guesses=0; correct=0; total=0

while ["$guess"!= "quit"]; do

··thiskey="$(randomquote $db)"

··# $thiskey — выбранная строка. Теперь нужно извлечь название штата

··#·· и города, и затем создать версию названия города со всеми буквами

··#·· в нижнем регистре для сопоставления.

картинка 495··state="$(echo $thiskey | cut −d\ −f1 | sed 's/-/ /g')"

··city="$(echo $thiskey | cut −d\ −f2 | sed 's/-/ /g')"

··match="$(echo $city | tr '[: upper: ]' '[: lower: ]')"

··guess="??"; total=$(($total + 1));

··echo ""

··echo "What city is the capital of $state?"

··# Главный цикл, где все и происходит. Сценарий выполняет его, пока

··#·· город не будет правильно угадан, или пока пользователь не введет

··#·· "next", чтобы пропустить штат, или "quit", чтобы завершить игру.

··while ["$guess"!= "$match" −a "$guess"!= "next" −a "$guess"!= "quit"]

··do

····/bin/echo −n "Answer: "

····read guess

····if ["$guess" = "$match" −o "$guess" = "$city"]; then

······echo ""

······echo "*** Absolutely correct! Well done! ***"

······correct=$(($correct + 1))

······guess=$match

····elif ["$guess" = "next" −o "$guess" = "quit"]; then

······echo ""

······echo "$city is the capital of $state." # Вы ДОЛЖНЫ это знать:)

······else

······echo "I'm afraid that's not correct."

····fi

··done

done

echo "You got $correct out of $total presented."

exit 0

Как это работает

Для такой увлекательной игры сценарий states имеет очень простую реализацию. Файл с данными хранит пары штат/столица, все пробелы в названиях заменены дефисами, и два поля разделены единственным пробелом. Благодаря этому извлечение названий городов и штатов осуществляется очень просто картинка 496.

Каждая попытка сравнивается с версией названия города, состоящей только из букв нижнего регистра (match), и с версией, где все буквы стоят в правильном регистре. Если ни в одном случае нет совпадения, введенное слово сравнивается с двумя командами: next и quit. Если обнаружится совпадение с любой из них, сценарий выводит правильный ответ и либо предлагает ввести столицу следующего штата, либо завершается. Если не найдено ни одного совпадения, попытка считается неудачной.

Запуск сценария

Этот сценарий не имеет аргументов, флагов или команд. Просто запустите его и играйте!

Результаты

Готовы проверить свое знание столиц штатов? Листинг 12.6 демонстрирует, насколько хорошо мы знаем столицы!

Листинг 12.6.Запуск игрового сценария states

$ states

What city is the capital of Indiana?

Answer: Bloomington

I’m afraid that’s not correct.

Answer: Indianapolis

*** Absolutely correct! Well done! ***

What city is the capital of Massachusetts?

Answer: Boston

*** Absolutely correct! Well done! ***

What city is the capital of West Virginia?

Answer: Charleston

*** Absolutely correct! Well done! ***

What city is the capital of Alaska?

Answer: Fairbanks

I’m afraid that’s not correct.

Answer: Anchorage

I’m afraid that’s not correct.

Answer: Nome

I’m afraid that’s not correct.

Answer: Juneau

*** Absolutely correct! Well done! ***

What city is the capital of Oregon?

Answer: quit

Salem is the capital of Oregon.

You got 4 out of 5 presented.

К счастью, игра запоминает количество только успешных попыток, а также не фиксирует, сколько раз вы обращались к Google, чтобы узнать ответ!

Усовершенствование сценария

Самый большой недостаток этой игры, пожалуй, ее придирчивость к правописанию. Неплохим усовершенствованием стал бы код, реализующий нечеткое сопоставление: чтобы, например, ответ пользователя Juneu вместо Juneau расценивался как правильный. Для этого можно было бы использовать модифицированный алгоритм Soundex (созвучия), который удаляет все гласные и из удвоенных согласных оставляет только одну (например, название Annapolis было бы преобразовано в npls). Это может оказаться слишком вольной трактовкой, но сама идея стоит того, чтобы ее рассмотреть.

Так же, как в других играх, в этой пригодились бы подсказки. Например, можно по запросу вывести первую букву правильного ответа и запоминать, как много подсказок запросил пользователь в сеансе игры.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Дейв Тейлор читать все книги автора по порядку

Дейв Тейлор - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание отзывы


Отзывы читателей о книге Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание, автор: Дейв Тейлор. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x