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

Интервал:

Закладка:

Сделать

if [$# −eq 1]; then # Чтобы компенсировать форматы с / и -

··set −$(echo $1 | sed 's/[\/\-]/ /g')

fi

С этим изменением сценарий позволяет вводить и нормализовать даты в следующих распространенных форматах:

$ normdate 6-10-2000

Jun 10 2000

$ normdate March-11-1911

Mar 11 1911

$ normdate 8/3/1962

Aug 3 1962

Если вы прочитаете код очень внимательно, то заметите, что в нем можно также усовершенствовать проверку поля с номером года, не говоря уже о поддержке разных международных форматов представления дат. Мы оставляем это вам как упражнение для самостоятельных исследований!

№ 4. Удобочитаемое представление больших чисел

Программисты часто допускают типичную ошибку, отображая результаты вычислений без предварительного форматирования. Пользователям сложно определить, например, сколько миллионов содержится в числе 43 245 435, не подсчитав количество цифр справа налево и не добавив мысленно запятые после каждого третьего знака. Сценарий в листинге 1.7 выводит большие числа в удобочитаемом формате.

Код

Листинг 1.7.Сценарий nicenumber форматирует большие числа, делая их удобочитаемыми

··#!/bin/bash

··# nicenumber — Отображает переданное число в формате представления с запятыми.

··#·· Предполагает наличие переменных DD (decimal point delimiter — разделитель

··#·· дробной части) и TD (thousands delimiter — разделитель групп разрядов).

··#·· Создает переменную nicenum с результатом, а при наличии второго аргумента

··#·· дополнительно выводит результат в стандартный вывод.

··nicenumber()

··{

····# Обратите внимание: предполагается, что для разделения дробной и целой

····#·· части во входном значении используется точка.

····#·· В выходной строке в качестве такого разделителя используется точка, если

····#·· пользователь не определил другой символ с помощью флага −d.

картинка 32····integer=$(echo $1 | cut −d. -f1) # Слева от точки

картинка 33····decimal=$(echo $1 | cut −d. -f2) # Справа от точки

····# Проверить присутствие дробной части в числе.

····if ["$decimal"!= "$1"]; then

······# Дробная часть есть, включить ее в результат.

······result="${DD:= '.'}$decimal"

····fi

··thousands=$integer

картинка 34··while [$thousands −gt 999]; do

картинка 35····remainder=$(($thousands % 1000)) # Три последние значимые цифры

····# В 'remainder' должно быть три цифры. Требуется добавить ведущие нули?

····while [${#remainder} −lt 3]; do # Добавить ведущие нули

······remainder="0$remainder"

····done

картинка 36····result="${TD:=","}${remainder}${result}" # Конструировать справа налево

картинка 37····thousands=$(($thousands / 1000)) # Оставить остаток, если есть

··done

··nicenum="${thousands}${result}"

··if [! -z $2]; then

····echo $nicenum

··fi

}

DD="." # Десятичная точка для разделения целой и дробной части

TD="," # Разделитель групп разрядов

# Начало основного сценария

# =================

картинка 38··while getopts "d: t: " opt; do

····case $opt in

······d) DD="$OPTARG";;

······t) TD="$OPTARG";;

····esac

··done

··shift $(($OPTIND — 1))

··# Проверка ввода

··if [$# −eq 0]; then

····echo "Usage: $(basename $0) [-d c] [-t c] number"

····echo " −d specifies the decimal point delimiter"

····echo " −t specifies the thousands delimiter"

····exit 0

··fi

картинка 39··nicenumber $1 1 # Второй аргумент заставляет nicenumber вывести результат.

··exit 0

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

Основная работа в этом сценарии выполняется циклом while внутри функции nicenumber() картинка 40, который последовательно удаляет три младших значащих разряда из числового значения в переменной thousands картинка 41и присоединяет их к создаваемой форматированной версии числа картинка 42. Затем цикл уменьшает числовое значение в thousands картинка 43и повторяет итерацию, если необходимо. Вслед за функцией nicenumber() начинается основная логика сценария. Сначала с помощью getopts картинка 44, анализируются параметры, переданные в сценарий, и затем вызывается функция nicenumber() картинка 45с последним аргументом, указанным пользователем.

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

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

Результат можно внедрить в сообщение, как показано ниже:

echo "Do you really want to pay \$$(nicenumber $price)?"

Результаты

Сценарий nicenumber может также принимать дополнительные параметры. Листинг 1.8 демонстрирует форматирование нескольких чисел с использованием сценария.

Листинг 1.8:Тестирование сценария nicenumber

$ nicenumber 5894625

5,894,625

$ nicenumber 589462532.433

589,462,532.433

$ nicenumber −d, -t. 589462532.433

589.462.532,433

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

В разных странах используют разные символы в качестве десятичной точки и для разделения групп разрядов, поэтому в сценарии предусмотрена возможность передачи дополнительных флагов. Например, в Германии и Италии сценарию следует передать −d"." и −t",", во Франции −d"," и −t " ", а в Швейцарии, где четыре государственных языка, следует использовать −d"." и −t "'". Это отличный пример ситуации, когда гибкость оказывается ценнее жестко определенных значений, потому что инструмент становится полезным для более широкого круга пользователей.

С другой стороны, мы жестко установили, что во входных значениях роль десятичной точки будет играть символ".", то есть, если вы предполагаете использование другого разделителя дробной и целой части во входных значениях, измените символ в двух вызовах команды cut в строках картинка 46и картинка 47, где сейчас используется".".

Ниже показано одно из решений:

integer=$(echo $1 | cut −d$DD −f1) # Слева от точки

decimal=$(echo $1 | cut −d$DD −f2) # Справа от точки

Это решение работоспособно, только если разделитель дробной и целой части во входном значении не отличается от разделителя, выбранного для результата, в противном случае сценарий просто не будет работать. Более сложное решение состоит в том, чтобы непосредственно перед этими двумя строками включить проверку, позволяющую убедиться, что разделитель дробной и целой части во входном значении совпадает с разделителем, указанным пользователем. Для реализации проверки можно использовать тот же трюк, что был показан в сценарии № 2: отбросить все цифры и посмотреть, что осталось, например:

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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