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

··#·· которые длиннее указанного предела

··width=72

··if [! -r "$1"]; then

····echo "Cannot read file $1" >&2

····echo "Usage: $0 filename" >&2

····exit 1

··fi

while read input

··do

····if [${#input} −gt $width]; then

······echo "$input" | fmt

····else

······echo "$input"

····fi

done < $1

··exit 0

<p>Как это работает</p>

Обратите внимание, что простая конструкция < $1 в конце цикла while подает на его вход указанный файл. Каждая строка из этого файла читается командой read input и сохраняется в переменной input для дальнейшего анализа.

Если ваша командная оболочка не поддерживает конструкцию ${#var}, ее поведение можно сымитировать очень удобной командой «word count» (счетчик слов) wc:

varlength="$(echo "$var" | wc −c)"

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

varlength="$(echo "$var" | wc −c | sed 's/[^[: digit: ]]//g')"

<p>Запуск сценария</p>

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

<p>Результаты</p>

Листинг 4.4. Тестирование сценария toolong

$ toolong ragged.txt

So she sat on, with closed eyes, and half believed herself in

Wonderland, though she knew she had but to open them again, and

all would change to dull reality-the grass would be only rustling

in the wind, and the pool rippling to the waving of the reeds-the

rattling teacups would change to tinkling sheep-bells, and the

Queen's shrill cries to the voice of the shepherd boy-and the

sneeze

of the baby, the shriek of the Gryphon, and all the other queer

noises, would change (she knew) to the confused clamour of the busy

farm-yard-while the lowing of the cattle in the distance would

take the place of the Mock Turtle's heavy sobs.

Обратите внимание, что в отличие от стандартной команды fmt сценарий toolong оставил переносы строк на месте, где это возможно. Так, слово sneeze, которое в исходном файле находится в отдельной строке, осталось в отдельной строке и в полученном выводе.

<p>№ 29. Вывод файла с дополнительной информацией</p>

Многие распространенные команды Unix и Linux первоначально создавались для работы с медленными, преимущественно неинтерактивными средствами вывода (мы уже упоминали, что Unix — это довольно древняя ОС?) и потому выводят минимум информации и не поддерживают интерактивного режима работы. Примером может служить команда cat: когда она используется для просмотра коротких файлов, она не выводит никакой полезной информации о файле. Однако было бы нелишне иметь такую информацию, так давайте получим ее! В листинге 4.5 приводится реализация команды showfile, альтернативы команде cat.

<p>Код</p>

Листинг 4.5. Сценарий showfile

··#!/bin/bash

··# showfile — выводит содержимое файла и дополнительную информацию

··width=72

··for input

··do

····lines="$(wc −l < $input | sed 's/ //g')"

····chars="$(wc −c < $input | sed 's/ //g')"

····owner="$(ls −ld $input | awk '{print $3}')"

····echo "---------"

····echo "File $input ($lines lines, $chars characters, owned by $owner):"

····echo "---------"

····while read line

····do

······if [${#line} −gt $width]; then

········echo "$line" | fmt | sed −e '1s/^/ /' −e '2,$s/^/+ /'

······else

········echo " $line"

······fi

····done < $input

····echo "---------"

Перейти на страницу:

Все книги серии Для профессионалов

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

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

Брендон Перри , Дейв Тейлор

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных