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

на главную

Жанры

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

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

Шрифт:

33.8. Проблемы безопасности

Уместным будет лишний раз предупредить о соблюдении мер предосторожности при работе с незнакомыми сценариями. Сценарий может содержать червя, трояна или даже вирус. Если вы получили сценарий не из источника, которому доверяете, то никогда не запускайте его с привилегиями root и не позволяйте вставлять его в список сценариев начальной инициализации системы в /etc/rc.d, пока не убедитесь в том, что он безвреден для системы.

Исследователи из Bell Labs

и других организаций, включая M. Douglas McIlroy, Tom Duff, и Fred Cohen исследовали вопрос о возможности создания вирусов на языке сценариев командной оболочки, и пришли к выводу, что это делается очень легко и доступно даже для новичков. [ 63 ]

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

63

См. статью Marius van Oers, Unix Shell Scripting Malware, а также ссылку на Denning в разделе Литература.

33.9. Проблемы переносимости

Эта книга делает упор на создании сценариев для командной оболочки Bash, для операционной системы GNU/Linux. Тем не менее, многие рекомендации, приводимые здесь, могут быть вполне применимы и для других командных оболочек, таких как sh и ksh.

Многие версии командных оболочек стремятся следовать стандарту POSIX 1003.2. Вызывая Bash с ключом --posix, или вставляя set -o posix в начало сценария, вы можете заставить Bash очень близко следовать этому стандарту. Но, даже без этого ключа, большинство сценариев, написанных для Bash, будут работать под управлением ksh, и наоборот, т.к. Chet Ramey перенес многие особенности, присущие ksh, в последние версии Bash.

В коммерческих версиях UNIX, сценарии, использующие GNU-версии стандартных утилит и команд, могут оказаться неработоспособными. Однако, с течением времени, таких проблем остается все меньше и меньше, поскольку утилиты GNU, в большинстве своем, заместили свои проприетарные аналоги в UNIX. После того, как Caldera дала разрешение на публикацию исходного кода некоторых версий оригинальных утилит UNIX, этот процесс значительно ускорился.

Bash имеет некоторые особенности, недоступные в традиционном Bourne shell. Среди них:

Некоторые дополнительные ключи вызова

Подстановка команд, с использованием нотации $

Некоторые операции над строками

Подстановка процессов

встроенные команды Bash

Более подробный список характерных особенностей Bash, вы найдете в Bash F.A.Q..

33.10. Сценарии командной оболочки под Windows

Даже те пользователи, которые работают в другой, не UNIX-подобной операционной системе, смогут запускать сценарии командной оболочки, а потому -- найти для себя много полезного в этой книге. Пакеты Cygwin от Cygnus, и MKS utilities от Mortice Kern Associates, позволяют дополнить Windows возможностями командной оболочки.

Глава 34. Bash, версия 2

Текущая версия Bash, та, которая скорее всего установлена в вашей системе, фактически -- 2.XX.Y.

bash$ echo $BASH_VERSION

2.05.8(1)-release

В

этой версии классического языка сценариев Bash были добавлены переменные-массивы [ 64 ] , расширение строк и подстановка параметров, улучшен метод косвенных ссылок на переменные.

Пример 34-1. Расширение строк

#!/bin/bash

# "Расширение" строк (String expansion).

# Введено в Bash, начиная с версии 2.

# Строки вида $'xxx'

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

echo $'Звонок звенит 3 раза \a \a \a'

echo $'Три перевода формата \f \f \f'

echo $'10 новых строк \n\n\n\n\n\n\n\n\n\n'

exit 0

64

Chet Ramey обещал ввести в Bash ассоциативные массивы (они хорошо знакомы программистам, работающим с языком Perl) в одном из следующих релизов Bash.

Пример 34-2. Косвенные ссылки на переменные -- новый метод

#!/bin/bash

# Косвенные ссылки на переменные.

a=letter_of_alphabet

letter_of_alphabet=z

echo "a = $a" # Прямая ссылка.

echo "Now a = ${!a}" # Косвенная ссылка.

# Форма записи ${!variable} намного удобнее старой "eval var1=\$$var2"

echo

t=table_cell_3

table_cell_3=24

echo "t = ${!t}" # t = 24

table_cell_3=387

echo "Значение переменной t изменилось на ${!t}" # 387

# Теперь их можно использовать для ссылок на элементы массива,

# или для эмуляции многомерных массивов.

# Было бы здорово, если бы косвенные ссылки допускали индексацию.

exit 0

Пример 34-3. Простая база данных, с применением косвенных ссылок

#!/bin/bash

# resistor-inventory.sh

# Простая база данных, с применением косвенных ссылок.

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

# Данные

B1723_value=470 # сопротивление (Ом)

B1723_powerdissip=.25 # рассеиваемая мощность (Вт)

B1723_colorcode="желтый-фиолетовый-коричневый" # цветовая маркировка

B1723_loc=173 # где

B1723_inventory=78 # количество (шт)

B1724_value=1000

B1724_powerdissip=.25

B1724_colorcode="коричневый-черный-красный"

B1724_loc=24N

B1724_inventory=243

B1725_value=10000

B1725_powerdissip=.25

B1725_colorcode="коричневый-черный-оранжевый"

B1725_loc=24N

B1725_inventory=89

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

echo

PS3='Введите ноиер: '

echo

select catalog_number in "B1723" "B1724" "B1725"

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

Заход. Солнцев. Книга XII

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

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Приручитель женщин-монстров. Том 3

Дорничев Дмитрий
3. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 3

Ищу жену для своего мужа

Кат Зозо
Любовные романы:
любовно-фантастические романы
6.17
рейтинг книги
Ищу жену для своего мужа

Сердце Дракона. Том 19. Часть 1

Клеванский Кирилл Сергеевич
19. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.52
рейтинг книги
Сердце Дракона. Том 19. Часть 1

Пустоцвет

Зика Натаэль
Любовные романы:
современные любовные романы
7.73
рейтинг книги
Пустоцвет

Жребий некроманта. Надежда рода

Решетов Евгений Валерьевич
1. Жребий некроманта
Фантастика:
фэнтези
попаданцы
6.50
рейтинг книги
Жребий некроманта. Надежда рода

Возвышение Меркурия. Книга 4

Кронос Александр
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 4

Бездомыш. Предземье

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

Столичный доктор. Том II

Вязовский Алексей
2. Столичный доктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Столичный доктор. Том II

Последний из рода Демидовых

Ветров Борис
Фантастика:
детективная фантастика
попаданцы
аниме
5.00
рейтинг книги
Последний из рода Демидовых

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Измена. Верну тебя, жена

Дали Мила
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верну тебя, жена