Дейв Тейлор - Сценарии командной оболочки. 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-е издание - читать книгу онлайн бесплатно, автор Дейв Тейлор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

картинка 196··. library.sh # Подключить библиотечный сценарий.

··if [$# −ne 3]; then

····echo "Usage: $0 principal interest loan-duration-years" >&2

····exit 1

··fi

картинка 197P=$1 I=$2 L=$3

··J="$(scriptbc −p 8 $I / \(12 \* 100 \))"

··N="$(($L * 12))"

··M="$(scriptbc −p 8 $P \* \($J / \(1 — \(1 + $J\) \^ −$N\) \))"

··# Выполнить необходимые преобразования значений:

картинка 198··dollars="$(echo $M | cut −d. -f1)"

··cents="$(echo $M | cut −d. -f2 | cut −c1-2)"

··cat << EOF

··A $L-year loan at $I % interest with a principal amount of $(nicenumber $P 1)

··results in a payment of \$$dollars.$cents each month for the duration of

··the loan ($N payments).

··EOF

··exit 0

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

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

Другой способ выполнить все вычисления — передать один большой поток входных данных программе bc, потому что она поддерживает переменные. Однако возможность манипулировать промежуточными значениями внутри самого сценария доказывает, что он позволяет произвести часть вычислений без привлечения команды bc. Кроме того, деление формулы на несколько промежуточных вычислений картинка 199упрощает отладку. Например, следующий код разбивает вычисленные месячные платежи на доллары и центы и гарантирует правильное форматирование денежных сумм:

dollars="$(echo $M | cut −d. -f1)"

cents="$(echo $M | cut −d. -f2 | cut −c1-2)"

Команда cut оказывается здесь особенно полезной картинка 200. Вторая строка в этом коде извлекает из суммы месячного платежа ту часть, которая следует за десятичной точкой, и затем отсекает все, что следует за вторым символом. Если вы пожелаете округлить число до центов в бо́льшую сторону, просто прибавьте 0,005 к результату вычислений перед усечением центов до двух цифр.

Обратите внимание, как в строке картинка 201командой. library.sh подключается библиотечный сценарий, созданный в главе 1, что обеспечивает доступность всех функций (в данном сценарии используется функция nicenumber() из главы 1).

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

Этот коротенький сценарий принимает три параметра: сумма кредита, процентная ставка и срок кредита (в годах).

Результаты

Представьте, что вы узнали о выходе новой модели Tesla Model S и вам интересно узнать, сколько придется заплатить, если купить ее в кредит. Стоимость модели Model S начинается примерно с 69 900 долларов, а ставка по кредиту составляет 4,75 % годовых. Допустим, что у вас уже есть автомобиль, за который вы выручите 25 000 долларов на вторичном рынке, и вам остается добавить 44 900. Недолго думая, вы можете сравнить суммы выплат по четырех- и пятилетнему автокредиту, просто воспользовавшись сценарием, показанным в листинге 3.11.

Листинг 3.11.Тестирование сценария loancalc

$ loancalc 44900 4.75 4

A 4-year loan at 4.75 % interest with a principal amount of 44,900

results in a payment of $1028.93 each month for the duration of

the loan (48 payments).

$ loancalc 44900 4.75 5

A 5-year loan at 4.75 % interest with a principal amount of 44,900

results in a payment of $842.18 each month for the duration of

the loan (60 payments).

Если вы в состоянии потянуть выплаты по четырехлетнему автокредиту, вы погасите его быстрее, и общая сумма выплат (произведение суммы месячного платежа на количество месяцев) значительно уменьшится. Чтобы подсчитать экономию, можно воспользоваться интерактивным калькулятором из сценария № 23, как показано ниже:

$ calc '(842.18 * 60) — (1028.93 * 48)'

1142.16

1142,16 доллара — хорошая экономия, этих денег хватит на отличный ноутбук!

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

Этот сценарий мог бы запрашивать необходимые данные при запуске без параметров. Еще более полезная версия сценария могла бы предлагать пользователю ввести любые три параметра из четырех (сумма кредита, процентная ставка, срок и сумма месячных платежей) и автоматически вычислять четвертое значение. В этом случае, зная, что вы способны выплачивать только 500 долларов в месяц и максимальная ставка по пятилетнему автокредиту составляет 6 %, вы сумели бы определить максимальную сумму доступного для вас кредита. Подобные вычисления можно выполнять, реализовав поддержку разных флагов, которые пользователи передавали бы сценарию.

№ 26. Слежение за событиями

Следующая пара сценариев реализует простую программу-календарь, похожую на утилиту напоминания из сценария № 22. Первый сценарий, addagenda (представлен в листинге 3.12), позволяет определить событие, повторяющееся (в определенные дни недели, месяца или года) или однократное (в конкретный день, месяц и год). Все даты проверяются и сохраняются вместе с однострочным описанием события в файле .agenda , в домашнем каталоге пользователя. Второй сценарий, agenda (представлен в листинге 3.13), просматривает все сохраненные события и отыскивает запланированные на текущую дату.

Этот инструмент особенно удобно использовать для запоминания дней рождений и годовщин. Если вы забываете про важные события, приведенная ниже пара сценариев поможет вам избежать конфуза!

Код

Листинг 3.12.Сценарий addagenda

··#!/bin/bash

··# addagenda — предлагает пользователю добавить новое событие для сценария agenda

··agendafile="$HOME/.agenda"

··isDayName()

··{

····# Возвращает 0, если все в порядке, 1 — в случае ошибки.

····case $(echo $1 | tr '[[: upper: ]]' '[[: lower: ]]') in

······sun*|mon*|tue*|wed*|thu*|fri*|sat*) retval=0;;

······*) retval=1;;

····esac

····return $retval

··}

··isMonthName()

··{

····case $(echo $1 | tr '[[: upper: ]]' '[[: lower: ]]') in

······jan*|feb*|mar*|apr*|may|jun*)··return 0;;

······jul*|aug*|sep*|oct*|nov*|dec*) return 0;;

······*) return 1;;

····esac

··}

картинка 202··normalize()

··{

····# Возвращает строку с первым символом в верхнем регистре

····#·· и другими двумя — в нижнем.

····/bin/echo −n $1 | cut −c1 | tr '[[: lower: ]]' '[[: upper: ]]'

····echo $1 | cut −c2-3| tr '[[: upper: ]]' '[[: lower: ]]'

··}

··if [! -w $HOME]; then

····echo "$0: cannot write in your home directory ($HOME)" >&2

····exit 1

··fi

··echo "Agenda: The Unix Reminder Service"

··/bin/echo −n "Date of event (day mon, day month year, or dayname): "

··read word1 word2 word3 junk

··if isDayName $word1; then

····if [! -z "$word2"]; then

······echo "Bad dayname format: just specify the day name by itself." >&2

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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