Дейв Тейлор - Сценарии командной оболочки. 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-е издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

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

Интервал:

Закладка:

Сделать

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

Код

Листинг 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

······exit 1

····fi

····date="$(normalize $word1)"

··else

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

······echo "Bad dayname format: unknown day name specified" >&2

······exit 1

····fi

····if [! -z "$(echo $word1|sed 's/[[: digit: ]]//g')"]; then

······echo "Bad date format: please specify day first, by day number" >&2

········exit 1

····fi

····if ["$word1" −lt 1 −o "$word1" −gt 31]; then

······echo "Bad date format: day number can only be in range 1-31" >&2

······exit 1

····fi

····if [! isMonthName $word2]; then

······echo "Bad date format: unknown month name specified." >&2

······exit 1

····fi

····word2="$(normalize $word2)"

····if [-z "$word3"]; then

······date="$word1$word2"

····else

······if [! -z "$(echo $word3|sed 's/[[: digit: ]]//g')"]; then

········echo "Bad date format: third field should be year." >&2

········exit 1

······elif [$word3 −lt 2000 −o $word3 −gt 2500]; then

········echo "Bad date format: year value should be 2000–2500" >&2

········exit 1

······fi

······date="$word1$word2$word3"

····fi

··fi

··/bin/echo −n "One-line description: "

··read description

··# Данные готовы к записи в файл

картинка 203··echo "$(echo $date|sed 's/ //g')|$description" >> $agendafile

··exit 0

Второй сценарий, в листинге 3.13, короче, но используется чаще.

Листинг 3.13.Сценарий agenda, сопутствующий сценарию addagenda из листинга 3.12

··#!/bin/sh

··# agenda — сканирует файл. agenda в поисках записей, относящихся

··#·· к текущей дате

··agendafile="$HOME/.agenda"

··checkDate()

··{

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

····weekday=$1 day=$2 month=$3 year=$4

картинка 204····format1="$weekday" format2="$day$month" format3="$day$month$year"

····# И выполнить поиск среди записей в файле…

····IFS="|" # Команда read автоматически разбивает

············#·· прочитанные строки по символам в IFS.

····echo "On the agenda for today: "

····while read date description; do

······if ["$date" = "$format1" −o "$date" = "$format2" −o \

·········· "$date" = "$format3"]

······then

········echo " $description"

······fi

····done < $agendafile

··}

··if [! -e $agendafile]; then

····echo "$0: You don't seem to have an.agenda file. " >&2

····echo "To remedy this, please use 'addagenda' to add events" >&2

····exit 1

··fi

··# Получить текущую дату…

картинка 205··eval $(date '+weekday="%a" month="%b" day="%e" year="%G"')

картинка 206··day="$(echo $day|sed 's/ //g’)" # Удалить возможные пробелы в начале.

··checkDate $weekday $day $month $year

··exit 0

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

Сценарии addagenda и agenda поддерживают три типа событий: еженедельные («каждую среду»), ежегодные («каждого 3 августа») и однократные («1 января 2017»). В процессе добавления записей в файл событий их даты нормализуются и сжимаются так, что 3 August превращается в 3Aug, а Thursday превращается в Thu. Эта операция выполняется функцией normalize в сценарии addagenda картинка 207.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x