LibKing » Книги » comp-programming » Мендель Купер - Искусство программирования на языке сценариев командной оболочки

Мендель Купер - Искусство программирования на языке сценариев командной оболочки

Тут можно читать онлайн Мендель Купер - Искусство программирования на языке сценариев командной оболочки - бесплатно полную версию книги (целиком). Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Мендель Купер - Искусство программирования на языке сценариев командной оболочки
  • Название:
    Искусство программирования на языке сценариев командной оболочки
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3.7/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Мендель Купер - Искусство программирования на языке сценариев командной оболочки краткое содержание

Искусство программирования на языке сценариев командной оболочки - описание и краткое содержание, автор Мендель Купер, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Данное руководство не предполагает наличие у читателя познаний в области программирования на языке сценариев, однако, быстро восполняет этот недостаток, постепенно, шаг за шагом раскрывая мудрость и красоту UNIX. Это руководство может рассматриваться как учебник, предназначенный для самостоятельного изучения или как справочник по программированию на shell. Руководство снабжено серией хорошо прокомментированных примеров, поскольку лучший путь к изучению языка сценариев -- это написание сценариев.

Искусство программирования на языке сценариев командной оболочки - читать онлайн бесплатно полную версию (весь текст целиком)

Искусство программирования на языке сценариев командной оболочки - читать книгу онлайн бесплатно, автор Мендель Купер
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

&

Выполнение задачи в фоне.Команда, за которой стоит &, будет исполняться в фоновом режиме.

bash$ sleep 10 &

[1] 850

[1]+ Done sleep 10

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

Пример 3-3. Запуск цикла в фоновом режиме

#!/bin/bash

# background-loop.sh

for i in 1 2 3 4 5 6 7 8 9 10 # Первый цикл.

do

echo -n "$i "

done & # Запуск цикла в фоне.

# Иногда возможны случаи выполнения этого цикла после второго цикла.

echo # Этот 'echo' иногда не отображается на экране.

for i in 11 12 13 14 15 16 17 18 19 20 # Второй цикл.

do

echo -n "$i "

done

echo # Этот 'echo' иногда не отображается на экране.

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

# Ожидается, что данный сценарий выведет следующую последовательность:

# 1 2 3 4 5 6 7 8 9 10

# 11 12 13 14 15 16 17 18 19 20

# Иногда возможен такой вариант:

# 11 12 13 14 15 16 17 18 19 20

# 1 2 3 4 5 6 7 8 9 10 bozo $

# (Второй 'echo' не был выполнен. Почему?)

# Изредка возможен такой вариант:

# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

# (Первый 'echo' не был выполнен. Почему?)

# Крайне редко встречается и такое:

# 11 12 13 1 2 3 4 5 6 7 8 9 10 14 15 16 17 18 19 20

# Второй цикл начал исполняться раньше первого.

exit 0

картинка 10Команда, исполняемая в пределах сценария в фоне, может подвесить сценарий, ожидая нажатия клавиши. К счастью, это легко "лечится".

&&

Логическая операция AND (логическое И).В операциях проверки условий, оператор && возвращает 0 (success) тогда, и только тогда, когда оба операнда имеют значение true (ИСТИНА).

-

префикс ключа.С этого символа начинаются опциональные ключи команд.

COMMAND -[Option1][Option2][...]

ls -al

sort -dfu $filename

set -- $variable

if [ $file1 -ot $file2 ]

then

echo "Файл $file1 был создан раньше чем $file2."

fi

if [ "$a" -eq "$b" ]

then

echo "$a равно $b."

fi

if [ "$c" -eq 24 -a "$d" -eq 47 ]

then

echo "$c равно 24, а $d равно 47."

fi

-

перенаправление из/в stdin или stdout.[дефис]

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)

# Перемещение полного дерева файлов и подкаталогов из одной директории в другую

# [спасибо Алану Коксу (Alan Cox) , за небольшие поправки]

# 1) cd /source/directory Переход в исходный каталог, содержимое которого будет перемещено

# 2) && "И-список": благодаря этому все последующие команды будут выполнены

# только тогда, когда 'cd' завершится успешно

# 3) tar cf - . ключом 'c' архиватор 'tar' создает новый архив,

# ключом 'f' (file) и последующим '-' задается файл архива -- stdout,

# в архив помещается текущий каталог ('.') с вложенными подкаталогами.

# 4) | конвейер с ...

# 5) ( ... ) subshell-ом (дочерним экземпляром командной оболочки)

# 6) cd /dest/directory Переход в каталог назначения.

# 7) && "И-список", см. выше

# 8) tar xpvf - Разархивирование ('x'), с сохранением атрибутов "владельца" и прав доступа ('p') к файлам,

# с выдачей более подробных сообщений на stdout ('v'),

# файл архива -- stdin ('f' с последующим '-').

#

# Примечательно, что 'x' -- это команда, а 'p', 'v' и 'f' -- ключи

# Во как!

# Более элегантный вариант:

# cd source-directory

# tar cf - . | (cd ../target-directory; tar xzf -)

#

# cp -a /source/directory /dest имеет тот же эффект.

bunzip2 linux-2.4.3.tar.bz2 | tar xvf -

# --разархивирование tar-файла-- | --затем файл передается утилите "tar"--

# Если у вас утилита "tar" не поддерживает работу с "bunzip2",

# тогда придется выполнять работу в два этапа, с использованием конвейера.

# Целью данного примера является разархивирование тарбола (tar.bz2) с исходными текстами ядра.

Обратите внимание, что в этом контексте "-" - не самостоятельный оператор Bash, а скорее опция, распознаваемая некоторыми утилитами UNIX (такими как tar, catи т.п.), которые выводят результаты своей работы в stdout .

bash$ echo "whatever" | cat -

whatever

В случае, когда ожидается имя файла, тогда "-" перенаправляет вывод на stdout (вспомните пример с tar cf) или принимает ввод с stdin .

bash$ file

Usage: file [-bciknvzL] [-f namefile] [-m magicfiles] file...

Сама по себе команда file без параметров завершается с сообщением об ошибке.

Добавим символ "-" и получим более полезный результат. Это заставит командный интерпретатор ожидать ввода от пользователя.

bash$ file -

abc

standard input: ASCII text

bash$ file -

#!/bin/bash

standard input: Bourne-Again shell script text executable

Теперь команда принимает ввод пользователя со stdin и анализирует его.

Используя передачу stdout по конвейеру другим командам, можно выполнять довольно эффектные трюки, например вставка строк в начало файла.

С помощью команды diff -- находить различия между одним файлом и частью другого:

grep Linux file1 | diff file2 -

И наконец пример использования служебного символа "-" с командой tar.

Пример 3-4. Резервное архивирование всех файлов, которые были изменены в течение последних суток

#!/bin/bash

# Резервное архивирование (backup) всех файлов в текущем каталоге,

# которые были изменены в течение последних 24 часов

#+ в тарболл (tarball) (.tar.gz - файл).

BACKUPFILE=backup

archive=${1:-$BACKUPFILE}

# На случай, если имя архива в командной строке не задано,

#+ т.е. по-умолчанию имя архива -- "backup.tar.gz"

tar cvf - `find . -mtime -1 -type f -print` > $archive.tar

gzip $archive.tar

echo "Каталог $PWD заархивирован в файл \"$archive.tar.gz\"."

# Stephane Chazelas заметил, что вышеприведенный код будет "падать"

#+ если будет найдено слишком много файлов

#+ или если имена файлов будут содержать символы пробела.

# Им предложен альтернативный код:

# -------------------------------------------------------------------

# find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"

# используется версия GNU утилиты "find".

# find . -mtime -1 -type f -exec tar rvf "$archive.tar" '{}' \;

# более универсальный вариант, хотя и более медленный,

# зато может использоваться в других версиях UNIX.

# -------------------------------------------------------------------

exit 0

картинка 11Могут возникнуть конфликтные ситуации между опреатором перенаправления "-" и именами файлов, начинающимися с символа "-". Поэтому сценарий должен проверять имена файлов и предаварять их префиксом пути, например, ./-FILENAME , $PWD/-FILENAME или $PATHNAME/-FILENAME .

Если значение переменной начинается с символа "-", то это тоже может быть причиной появления ошибок.

var="-n"

echo $var

# В данном случае команда приобретет вид "echo -n" и ничего не выведет.

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Мендель Купер читать все книги автора по порядку

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




Искусство программирования на языке сценариев командной оболочки отзывы


Отзывы читателей о книге Искусство программирования на языке сценариев командной оболочки, автор: Мендель Купер. Читайте комментарии и мнения людей о произведении.


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

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img