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

Интервал:

Закладка:

Сделать

картинка 127··matches="$(ls −d *"$1" 2> /dev/null | wc −l)"

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

····echo "No match for \"$1\" in the deleted file archive." >&2

····exit 1

··fi

картинка 128··if [$matches −gt 1]; then

····echo "More than one file or directory match in the archive: "

····index=1

····for name in $(ls −td *"$1")

····do

······datetime="$(echo $name | cut −c1-14 | \

картинка 129········awk−F. '{ print $5"/"$4" at "$3":"$2":"$1 }')"

······filename="$(echo $name | cut −c16-)"

······if [-d $name]; then

картинка 130········filecount="$(ls $name | wc −l | sed 's/[^[: digit: ]]//g')"

········echo " $index) $filename (contents = ${filecount} items," \

············ " deleted = $datetime)"

······else

картинка 131········size="$(ls −sdk1 $name | awk '{print $1}')"

········echo " $index) $filename (size = ${size}Kb, deleted = $datetime)"

······fi

······index=$(($index + 1))

····done

····echo ""

····/bin/echo −n "Which version of $1 should I restore ('0' to quit)? [1]: "

····read desired

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

······echo "$0: Restore canceled by user: invalid input." >&2

······exit 1

····fi

····if [${desired:=1} −ge $index]; then

······echo "$0: Restore canceled by user: index value too big." >&2

······exit 1

····fi

····if [$desired −lt 1]; then

······echo "$0: Restore canceled by user." >&2

······exit 1

····fi

картинка 132····restore="$(ls −td1 *"$1" | sed −n "${desired}p")"

картинка 133····if [-e "$dest/$1"]; then

······echo "\"$1\" already exists in this directory. Cannot overwrite." >&2

······exit 1

····fi

····/bin/echo −n "Restoring file \"$1\"…"

····$move "$restore" "$dest/$1"

····echo "done."

картинка 134····/bin/echo −n "Delete the additional copies of this file? [y] "

····read answer

····if [${answer:=y} = "y"]; then

······$realrm −rf *"$1"

······echo "Deleted."

····else

······echo "Additional copies retained."

····fi

··else

····if [-e "$dest/$1"]; then

······echo "\"$1\" already exists in this directory. Cannot overwrite." >&2

······exit 1

····fi

····restore="$(ls −d *"$1")"

····/bin/echo −n "Restoring file \"$1\"… "

····$move "$restore" "$dest/$1"

····echo "Done."

··fi

··exit 0

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

Первый фрагмент кода в картинка 135, блок в условной инструкции if [$# −eq 0], выполняется, если сценарий запущен без аргументов. Он выводит содержимое архива удаленных файлов. Однако тут есть одна загвоздка: нам нужно вывести имена файлов без префикса со временем удаления, потому что он предназначен только для внутреннего использования. Префикс только ухудшил бы читаемость списка. Для решения этой задачи применяется команда sed в картинка 136, которая удаляет первые пять вхождений шаблона «цифра цифра точка» из каждой строки в выводе команды ls.

Пользователь может указать в аргументе имя файла или каталога для восстановления. Следующий шаг в картинка 137— проверка количества совпадений с именем, указанным пользователем.

Необычное применение вложенных двойных кавычек в этой строке (вокруг $1) позволяет команде ls находить совпадения с именами файлов, содержащими пробелы, а шаблонный символ * разрешает совпадения с именами, включающими произвольные префиксы с временем удаления. Последовательность 2> /dev/null нужна, чтобы скрыть любые сообщения об ошибках от пользователя, выводимые командой. С наибольшей вероятностью будет скрыто сообщение об ошибке «No such file or directory» («Нет такого файла или каталога»), которое выводит команда ls, когда не может найти файл с указанным именем.

При наличии нескольких совпадений с указанным именем файла или каталога выполняется самая сложная часть сценария — блок в инструкции if [$matches −gt 1] картинка 138, который выводит все результаты. Флаг −t в команде ls, вызываемой в главном цикле for, обеспечивает перебор файлов в архиве в обратном хронологическом порядке — от более новых к более старым, а вызов команды awk в картинка 139преобразует префикс в имени файла в дату и время удаления в круглых скобках. В строке картинка 140определяется размер файла в килобайтах, для чего вызывается команда ls с флагом −k.

Вместо размера записи, соответствующей каталогу в структуре файловой системы, сценарий выводит более полезную информацию — количество файлов в каждом совпавшем каталоге. Вычисляется оно очень просто. В картинка 141просто подсчитывается количество строк в выводе команды ls и отбрасываются любые пробелы из вывода команды wc.

Когда пользователь выберет одно из совпадений, команда в картинка 142получит точное имя файла для восстановления. Эта команда чуть иначе использует sed. Здесь с помощью флага −n строчному редактору sed передается номер строки (${desired}) и команда p (print — печать), что позволяет быстро извлечь из потока ввода указанную строку. Хотите увидеть только строку с номером 37? Команда sed −n 37p сделает это.

Далее, в строке картинка 143, сценарий unrm проверяет, не затрет ли он существующий файл, и затем восстанавливает файл или каталог вызовом команды /bin/mv. После этого в картинка 144пользователю дается возможность удалить все остальные (вероятно, избыточные) копии файла, и сценарий завершается.

Обратите внимание, что команда ls с шаблоном *"$1" найдет все файлы, имена которых оканчиваются значением параметра $1, поэтому список с «совпавшими файлами» может содержать не только файл, который пользователь хотел бы восстановить. Например, если удаляемый каталог содержал файлы 11.txt и 111.txt , команда unrm 11.txt сообщит, что найдено несколько совпадений и вернет список с обоими файлами, 11.txt и 111.txt . На первый взгляд в этом нет ничего страшного, но как только пользователь выберет файл для восстановления ( 11.txt ) и ответит утвердительно на предложение удалить другие копии, сценарий удалит также файл 111.txt . Такое поведение по умолчанию в некоторых случаях может оказаться нежелательным. Однако это легко исправить, использовав шаблон??.??.??.??.??."$1", если в сценарии newrm сохранен формат префикса в именах копий.

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

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

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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