Чтение онлайн

на главную

Жанры

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

Купер Мендель

Шрифт:

Пример 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"

Поделиться:
Популярные книги

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи

Мастер Разума

Кронос Александр
1. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
6.20
рейтинг книги
Мастер Разума

Сиротка 4

Первухин Андрей Евгеньевич
4. Сиротка
Фантастика:
фэнтези
попаданцы
6.00
рейтинг книги
Сиротка 4

Провинциал. Книга 7

Лопарев Игорь Викторович
7. Провинциал
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Провинциал. Книга 7

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Книга пяти колец

Зайцев Константин
1. Книга пяти колец
Фантастика:
фэнтези
6.00
рейтинг книги
Книга пяти колец

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Болотник 3

Панченко Андрей Алексеевич
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 3

Темный Охотник 3

Розальев Андрей
3. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник 3

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

Восход. Солнцев. Книга X

Скабер Артемий
10. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга X

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII