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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

outer_variable=Outer

(

inner_variable=Inner

echo "Дочерний процесс, \"inner_variable\" = $inner_variable"

echo "Дочерний процесс, \"outer\" = $outer_variable"

)

echo

if [ -z "$inner_variable" ]

then

echo "Переменная inner_variable не определена в родительской оболочке"

else

echo "Переменная inner_variable определена в родительской оболочке"

fi

echo "Родительский процесс, \"inner_variable\" = $inner_variable"

# Переменная $inner_variable не будет определена

# потому, что переменные, определенные в дочернем процессе,

# ведут себя как "локальные переменные".

echo

exit 0

См. также Пример 31-1.

+

Смена текущего каталога в дочернем процессе (подоболочке) не влечет за собой смену текущего каталога в родительской оболочке.

Пример 19-2. Личные настройки пользователей

#!/bin/bash

# allprofs.sh: вывод личных настроек (profiles) всех пользователей

# Автор: Heiner Steven

# С некоторыми изменениями, внесенными автором документа.

FILE=.bashrc # Файл настроек пользователя,

#+ в оригинальном сценарии называется ".profile".

for home in `awk -F: '{print $6}' /etc/passwd`

do

[ -d "$home" ] || continue # Перейти к следующей итерации, если нет домашнего каталога.

[ -r "$home" ] || continue # Перейти к следующей итерации, если не доступен для чтения.

(cd $home; [ -e $FILE ] && less $FILE)

done

# По завершении сценария -- нет теобходимости выполнять команду 'cd', чтобы вернуться в первоначальный каталог,

#+ поскольку 'cd $home' выполняется в подоболочке.

exit 0

Подоболочка может использоваться для задания "специфического окружения" для группы команд.

COMMAND1

COMMAND2

COMMAND3

(

IFS=:

PATH=/bin

unset TERMINFO

set -C

shift 5

COMMAND4

COMMAND5

exit 3 # Выход только из подоболочки.

)

# Изменение переменных окружения не коснется родительской оболочки.

COMMAND6

COMMAND7

Как вариант использования подоболочки -- проверка переменных.

if (set -u; : $variable) 2> /dev/null

then

echo "Переменная определена."

fi

# Можно сделать то же самое по другому: [[ ${variable-x} != x || ${variable-y} != y ]]

# или [[ ${variable-x} != x$variable ]]

# или [[ ${variable+x} = x ]])

Еще одно применение -- проверка файлов блокировки:

if (set -C; : > lock_file) 2> /dev/null

then

echo "Этот сценарий уже запущен другим пользователем."

exit 65

fi

# Спасибо S.C.

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

Пример 19-3. Запуск нескольких процессов в подоболочках

(cat list1 list2 list3 | sort | uniq > list123) &

(cat list4 list5 list6 | sort | uniq > list456) &

# Слияние и сортировка двух списков производится одновременно.

# Запуск в фоне гарантирует параллельное исполнение.

#

# Тот же эффект дает

# cat list1 list2 list3 | sort | uniq > list123 &

# cat list4 list5 list6 | sort | uniq > list456 &

wait # Ожидание завершения работы подоболочек.

diff list123 list456

Перенаправление ввода/вывода в/из подоболочки производится оператором построения конвейера "|", например, ls -al | (command).

Блок команд, заключенный в фигурные скобки не приводит к запуску дочерней подоболочки.

{ command1; command2; command3; ... }

Глава 20. Ограниченный режим командной оболочки

Команды, запрещенные в ограниченном режиме командной оболочки

Запуск сценария или его части в ограниченном режиме, приводит к наложению ограничений на использование некоторых команд. Эта мера предназначена для ограничения привилегий пользователя, запустившего сценарий, и минимизации возможного ущерба системе, который может нанести сценарий.

В ограниченном режиме запрещена команда cd -- смена текщего каталога.

Запрещено изменять переменные окружения $PATH , $SHELL , $BASH_ENV и $ENV .

Заперщен доступ к переменной $SHELLOPTS .

Запрещено перенаправление вывода.

Запрещен вызов утилит, в названии которых присутствует хотя бы один символ "слэш" (/).

Запрещен вызов команды exec для запуска другого процесса.

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

Запрещен выход из ограниченного режима.

Пример 20-1. Запуск сценария в ограниченном режиме

#!/bin/bash

# Если sha-bang задать в таком виде: "#!/bin/bash -r"

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

echo

echo "Смена каталога."

cd /usr/local

echo "Текущий каталог: `pwd`"

echo "Переход в домашний каталог."

cd

echo "Текущий каталог: `pwd`"

echo

# До сих пор сценарий исполнялся в обычном, неограниченном режиме.

set -r

# set --restricted имеет тот же эффект.

echo "==> Переход в ограниченный режим. <=="

echo

echo

echo "Попытка сменить текущий каталог в ограниченном режиме."

cd ..

echo "Текущий каталог остался прежним: `pwd`"

echo

echo

echo "\$SHELL = $SHELL"

echo "Попытка смены командного интерпретатора в ограниченном режиме."

SHELL="/bin/ash"

echo

echo "\$SHELL= $SHELL"

echo

echo

echo "Попытка перенаправления вывода в ограниченном режиме."

ls -l /usr/bin > bin.files

ls -l bin.files # Попробуем найти файл, который пытались создать.

echo

exit 0

Глава 21. Подстановка процессов

Подстановка процессов -- это аналог подстановки команд. Операция подстановки команд записывает в переменную результат выполнения некоторой команды, например, dir_contents=`ls -al`или xref=$(grep word datafile). Операция подстановки процессов передает вывод одного процесса на ввод другого (другими словами, передает результат выполнения одной команды -- другой).

Шаблон подстановки команды

Внутри круглых скобок

>(command)

<(command)

Таким образом инициируется подстановка процессов. Здесь, для передачи результата работы процесса в круглых скобках, используются файлы /dev/fd/. [ 49 ] Имеет тот же эффект, что и именованные каналы (временный файл), фактически, именованные каналы некогда использовались в операциях подстановки процессов.

Между круглой скобкой и символом "<" или ">", не должно быть пробелов, в противном случае это вызовет сообщение об ошибке.

bash$ echo >(true)

/dev/fd/63

bash$ echo <(true)

/dev/fd/63

Bash создает канал с двумя файловыми дескрипторами, --fIn и fOut--. stdin команды true присоединяется к fOut (dup2(fOut, 0)), затем Bash передает /dev/fd/fIn в качестве аргумента команде echo. В системах, где отсутствуют файлы /dev/fd/, Bash может использовать временные файлы. (Спасибо S.C.)

cat <(ls -l)

# То же самое, что и ls -l | cat

sort -k 9 <(ls -l /bin) <(ls -l /usr/bin) <(ls -l /usr/X11R6/bin)

# Список файлов в трех основных каталогах 'bin', отсортированный по именам файлов.

# Обратите внимание: на вход 'sort' поданы три самостоятельные команды.

diff <(command1) <(command2) # Выдаст различия в выводе команд.

tar cf >(bzip2 -c > file.tar.bz2) $directory_name

# Вызовет "tar cf /dev/fd/?? $directory_name" и затем "bzip2 -c > file.tar.bz2".

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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