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

Здесь есть возможность читать онлайн «Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: СПб., Год выпуска: 2017, ISBN: 2017, Издательство: Питер, Жанр: Программирование, ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

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

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Глава 15. Дни и даты

Вычисления с датами порой бывают очень запутанными, например, когда нужно выяснить, високосный ли указанный год, сколько дней осталось до Нового года или сколько дней вы прожили. В этой области между Unix-системами, такими как OS X, и системами Linux, с их инструментами GNU, лежит глубокая пропасть. Дэвид Маккензи (David MacKenzie), взявший на себя труд переписать утилиту date для GNU-версии Linux, значительно расширил ее возможности.

Если вы пользуетесь OS X или другой системой, где команда date −version выводит сообщение об ошибке, загрузите комплект основных утилит, в состав которого входит расширенная утилита GNU date (иногда устанавливается как gdate). В OS X это можно выполнить с помощью диспетчера пакетов (не установлен по умолчанию, но установить его легко):

$ brew install coreutils

После установки GNU-версии утилиты date определить, високосный ли указанный год, можно с помощью самой программы, без необходимости путаться в сложных правилах о годах, кратных 4, но не 100, и других:

if [$(date 12/31/$year +%j) −eq 366]

Иными словами, если последним днем года является 366-й, этот год — високосный.

Еще одна замечательная особенность GNU date — возможность вернуться назад во времени. Стандартная команда date в системе Unix основана на понятии «нулевого времени» или дате эпохи: 00:00:00 по Гринвичу 1 января 1970 года. Хотите узнать что-нибудь о происходившем в 1965? Тогда вам не повезло. К счастью, с тремя остроумными сценариями в этой главе вы сможете в полной мере использовать преимущества GNU date.

№ 99. Определение дня недели в указанную дату в прошлом

Вкратце: в какой день недели вы родились? В какой день недели Нил Армстронг и Базз Олдрин ступили на Луну? Сценарий в листинге 15.1 поможет вам быстро найти ответы на эти типичные вопросы и наглядно продемонстрирует мощь GNU date.

Код

Листинг 15.1.Сценарий dayinpast

#!/bin/bash

# dayinpast — получая дату, сообщает соответствующий ей день недели.

if [$# −ne 3]; then

··echo "Usage: $(basename $0) mon day year" >&2

··echo " with just numerical values (ex: 7 7 1776)" >&2

··exit 1

fi

date −version > /dev/null 2>&1 # Отбросить сообщение об ошибке, если появится.

baddate="$?"····················# И сохранить только возвращаемый код.

if [! $baddate]; then

картинка 579··date −d $1/$2/$3 +"That was a %A."

else

··if [$2 −lt 10]; then

····pattern=" $2[^0–9]"

··else

····pattern="$2[^0–9]"

··fi

··dayofweek="$( картинка 580ncal $1 $3 | grep "$pattern" | −c— c1-2)"

··case $dayofweek in

····Su) echo "That was a Sunday.";····;;

····Mo) echo "That was a Monday.";····;;

····Tu) echo "That was a Tuesday.";··;;

····We) echo "That was a Wednesday.";;;

····Th) echo "That was a Thursday.";··;;

····Fr) echo "That was a Friday.";····;;

····Sa) echo "That was a Saturday.";··;;

··esac

fi

exit 0

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

Мы так нахваливали GNU date, и знаете почему? А потому, что весь сценарий сводится к к единственной команде в картинка 581.

До смешного просто.

Если требуемая версия date недоступна, сценарий использует ncal картинка 582, разновидность простой программы cal, которая представляет указанный месяц в любопытном, он очень полезном (!) формате:

$ ncal 8 1990

····August 1990

Mo···· 6 13 20 27

Tu···· 7 14 21 28

We··1··8 15 22 29

Th··2··9 16 23 30

Fr··3 10 17 24 31

Sa··4 11 18 25

Su··5 12 19 26

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

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

Нил Армстронг и Базз Олдрин прилунились на Базе Спокойствия 20 июля 1969 года, и, как сообщают результаты в листинге 15.2, это было воскресенье.

Листинг 15.2.Запуск сценария dayinpast с датой посадки Армстронга и Олдрина на Луну

$ dayinpast 7 20 1969

That was a Sunday.

День «Д» высадки союзнических войск в Нормандии, 6 июня 1944 года:

$ dayinpast 6 6 1944

That was a Tuesday.

А вот еще пример, день принятия Декларации о независимости США, 4 июля 1776 года:

$ dayinpast 7 4 1776

That was a Thursday.

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

Все сценарии в этой главе принимают входные данные в формате месяц день год , но было бы хорошо дать пользователям возможность указывать данные в более привычном им виде, например: месяц/день/год . К счастью, это совсем несложно, и отличной отправной точкой вам послужит сценарий № 3 в главе 1.

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

Интервал:

Закладка:

Сделать

Похожие книги на «Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание»

Представляем Вашему вниманию похожие книги на «Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


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

Обсуждение, отзывы о книге «Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x