• Русский
  • English (UK)
Соцсеть: Базы данных Oracle, СУБД MySQL, SQL, программирование Java, APEX, администрирование
  • Главная
    • Новости корпорации Oracle
    • Внедрения продуктов и рещений Oracle
    • СУБД Oracle
    • СУБД MySQL
  • Сообщество
  • Блоги
  • Книги
  • Поиск
  • Форум
Search
  • Вы здесь:  
  • Главная
  • Oracle: database & etc
  • БД Oracle: основы

Написание сценариев оболочки в Unix и Linux

  • Печать
  • E-mail
Подробности
Автор: Алексей Вятский
Опубликовано: 06 апреля 2017
Просмотров: 1007
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

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

Что собой представляет программа оболочки

Сценарием оболочки (или программой оболочки) называется файл, содержащий набор команд. Сценарий оболочки выглядит во многом так же, как и обычный файл UNIX,но содержит команды, которые могут выполняться оболочкой. Хотя здесь в основном будет рассказываться о написании программ для оболочки Korn, процесс написания программ для Bourne и C во многом похож. При желании сделать Korn оболочкой, используемой умолчанию, попросите администратора системы внести для вашей учетной записи соответствующие изменения в отвечающую за оболочку запись в файле /etc/passwd.

Прежде чем приступать к созданию программы оболочки, необходимо усвоить, что программы оболочки не содержат никаких специальных команд, которых нельзя было использовать в командной строке. Фактически любую команду из сценария оболочки можно вводить в командной строке и достигать того же самого результата. Все, что программа оболочки делает, так это избавляет от необходимости вводить одни и те же команды снова и снова всякий раз, когда требуется выполнить какой-то набор команд вместе. Кроме того, программы оболочки очень легко настраивать на регулярный запуск.

Использование переменных оболочки

О том, как переменные оболочки можно применять для настройки среды UNIX, уже рассказывалось в моем блоге. Их часто устанавливают внутри программы оболочки для того, чтобы они сохраняли свои значения на протяжении всего выполнения программы.

В случае запуска программы оболочки вручную переменные оболочки можно устанавливать непосредственно в используемом сеансе; тогда специфицировать их отдельно в программе оболочки нет никакой необходимости. Однако вручную программы оболочки запускаются редко, так как это сводит на нет саму цель применения таких программ.Чаще всего они запускаются в виде одного из заданий cron и потому могут запускаться и из такого сеанса, в котором не все переменные среды установлены правильным образом. За счет присваивания значений переменным оболочки внутри программы можно обеспечивать гарантию того, что при ее выполнении для таких ключевых переменных,как PATH, ORACLE_SID и ORACLE_HOME, будут использоваться корректные значения.

Вычисление выражений с помощью команды test

Для того чтобы писать хорошие сценарии оболочки, нужно обязательно разбираться в применении команды test. В большинстве сценариев используются условные операторы (наподобие if-then, while-do и until-do). Команда test помогает определять,удовлетворяется в таких операторах условие или нет.

В частности, команда test вычисляет выражение, и если условие оказывается истинным, возвращает значение 0, а если нет — тогда значение больше нуля (обычно 1).

Синтаксис команды test выглядит следующим образом:

test выражение 

Она может использоваться как сама по себе, так и вместе с конструкциями if, while или until для вычисления любого выражения. Ниже приведен пример:

$ test "ONE" = "one" 

Этот оператор просит команду test определить, являются ли строки “ONE” и “one” одинаковыми.

Команду test можно применять неявно (через псевдоним), указывая вместо слова test квадратные скобки:

$ [ "ONE" = "one" ] 

Для выяснения того, истинным или ложным у команды test (или ее эквивалента с квадратными скобками) получилось выражение "ONE" = "one", следует помнить о том,что если результирующий код (код завершения) равен 0, выражение считается истинным, а в противном случае, соответственно, ложным. Чтобы отобразить результирующий код, достаточно воспользоваться специальной переменной $?, которая показывает код завершения для любой команды UNIX или Linux. В нашем случае код завершения будет выглядеть так:

$ test "ONE" = "one"
$ echo $?
0

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

При сравнении целых чисел вместе с командой test можно также применять следующие операции отношения:

-ne: не равно
-eq: равно
-lt: меньше
-gt: больше
-ge: больше или равно
-le: меньше или равно 

Запуск программ оболочки с аргументами командной строки

Для спецификации параметров программ оболочки часто используются аргументы командной строки. Например, программа example.ksh может быть запущена следующим образом:

$ example.ksh prod1 system

В данном случае example.ksh — это имя файла, в котором находится сценарий оболочки, а prod1 и system — аргументы командной строки, указывающие, соответственно, на имя базы данных и имя пользователя в этой базе данных. Внутри сценария оболочки есть два аргумента $1 и $2, которые соответствуют prod1 и system.

В UNIX используется позиционная система, означающая, что первый аргумент после имени сценария оболочки является значением переменной $1, второй — значением переменной $2 и т.д. То есть под каждой встречающейся внутри сценария ссылкой на переменную $1 подразумевается, что данная переменная ссылается на первый аргумент (каковым в приведенном примере является имя базы данных prod1).

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

Анализ сценария оболочки

Давайте рассмотрим простой, предназначенный для наблюдения за базой данных сценарий оболочки по имени example.ksh. Этот сценарий выполняет проверку на предмет наличия определенного файла и уведомляет, если ему не удается его отыскать.В нем используется один аргумент командной строки для указания имени базы данных,а это значит, что в нем должна присутствовать переменная $1.

При создании программы оболочки UNIX никак не может знать, что эта программа является исполняемой. Для уведомления UNIX о том, что программа представляет собой исполняемый сценарий оболочки, применяется команда chmod: 

$ ll example.ksh
-rw-rw-rw- 1 salapati dba 439 feb 02 16:51 example.ksh
$ chmod 766 example.ksh
$ ll example.ksh
4-rwxrw-rw- 1 salapati dba 439 feb 02 16:52 example.ksh
$

Здесь можно увидеть, что при первоначальном создании сценарий не был исполняемым, поскольку не предусматривал ни для кого прав на выполнение. За счет применения команды chmod разрешение на выполнение этого сценария было предоставлено его владельцу (salapati) и после этого он стал исполняемым.

Ниже приведено содержимое сценария оболочки example.ksh, предусматривающее выполнение проверки на предмет наличия в каталоге определенного файла и отправку соответствующего электронного сообщения администратору баз данных в случае, если его там не окажется: 

#!/bin/ksh
ORACLE_SID=$1 export ORACLE_SID
PATH=/usr/bin:/usr/local/bin:/usr/contrib./bin:$PATH
export PATH
ORACLE_BASE=${ORACLE_HOME}/../..;
export ORACLE_BASE
export CURRDATE='date +%m%dY_%H%M'
export LOGFILE=/tmp/dba/dba.log
test -s $ORACLE_HOME/dbs/test${ORACLE_SID}.dbf
if [ 'echo $?' -ne 0 ]
then
echo "Файл не найден!"
mailx -s "Критическая ошибка: тестовый файл не найден!" Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. < $LOGFILE
fi

Теперь вкратце проанализируем содержимое сценария. В первой строке объявляется о том, что данная программа будет использовать оболочку Korn — именно это и обозначает самая верхняя строка #!/bin/ksh. Такая строка является стандартной для программ, предназначенных для оболочки Korn (и выглядит примерно так же и в программах, предназначенных для других оболочек).

В следующей строке мы видим, что переменной среды ORACLE_SID назначается значение переменной $1. Это значит, что во время выполнения программы оболочки переменной $1 будет присваиваться значение первого передаваемого параметра и что именно оно и будет устанавливаться для переменной среды ORACLE_SID. Еще в этой строке выполняется экспорт значения для переменной среды ORACLE_BASE.

Далее в программе экспортируются значения для трех переменных среды — PATH,CURRDATE и LOGFILE. Затем в сценарии используется команда тестирования файла,test, для выполнения проверки на предмет существования в конкретном месте файла testprod1.dbf (где prod1 соответствует значению ORACLE_SID). В UNIX успешное выполнение команды обозначается значением 0, а неудачное — значением 1; еще нужно вспомнить о том, что echo $?variable_name будет приводить к выводу значения переменной на экран. Исходя из этого, идущая далее строка, if [ 'echo $? ' -ne 0], дословно означает: “если результат выполнения команды test негативный” (или, другими словами, “если файл не существует”). Потом идет оператор then, который в случае,если данное условие истинно (файл не существует), будет заносить в журнальный файл сообщение “Файл не найден!”, а также с помощью программы mail отправлять администратору баз данных электронное сообщение о том, что требуемый файл отсутствует.Программа mail позволяет отправлять электронные сообщения как на личный электронный адрес человека, так и на адрес учетных записей пользователей, находящихся на другом сервере UNIX.

Все, что необходимо сделать, чтобы запустить или выполнить этот сценарий оболочки — ввести его имя в командной строке и указать после него имя интересующей базы данных. Чтобы этот метод сработал, однако, при запуске сценария нужно обязательно находиться в оболочке Korn.

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

Вас заинтересует / Intresting for you:

Что собой представляет оболочк...
Что собой представляет оболочк... 514 просмотров Aganer Tue, 21 Nov 2017, 13:19:25
Получение справочной информаци...
Получение справочной информаци... 553 просмотров Алексей Вятский Tue, 21 Nov 2017, 13:19:25
Просмотр команд SQL с помощью ...
Просмотр команд SQL с помощью ... 666 просмотров Ольга Потемкина Tue, 21 Nov 2017, 13:18:46
Ввод SQL-инструкций в SQL*Plus
Ввод SQL-инструкций в SQL*Plus 5247 просмотров Александров Попков Wed, 14 Mar 2018, 05:39:02
0
  • Условные операторы ветвления и операторы цыкла в оболочке Korn
  • Подключение к серверу UNIX с БД Oracle
Обсудить эту статью
Войдите, чтобы комментировать
Тема на форуме: Написание сценариев оболочки в Unix и Linux

apv аватар
apv ответил в теме #8403 06 апр 2017 12:17
Любой стоящий админ баз данных Oracle и Mysql должен уметь писать сценарии/скрипты под Linux/Unix. Резервирование, проверка и куча других задач.
Подробнее...

  • Oracle: database & etc
    • БД Oracle: основы
    • БД Oracle: для профи
    • БД Oracle: настройка производительности
    • БД Oracle: защита
    • БД Oracle: бэкап и восстановление
    • БД Oracle: кодинг
    • Oracle: продукты
  • Базы данных
    • SQL, PL/SQL, T-SQL
    • MySQL и MariaDB
    • PostgreSQL
    • Базы данных NoSQL
    • Microsoft SQL Server
  • Программирование
  • Веб-технологии
  • Информационные системы
  • Операционные системы
  • Сетевые и облачные технологии
  • Разные ИТ-темы
  • Oracle: database & etc
    • БД Oracle: основы
    • БД Oracle: для профи
    • БД Oracle: настройка производительности
    • БД Oracle: защита
    • БД Oracle: бэкап и восстановление
    • БД Oracle: кодинг
    • Oracle: продукты
  • Базы данных
    • SQL, PL/SQL, T-SQL
    • MySQL и MariaDB
    • PostgreSQL
    • Базы данных NoSQL
    • Microsoft SQL Server
  • Программирование
  • Веб-технологии
  • Информационные системы
  • Операционные системы
  • Сетевые и облачные технологии
  • Разные ИТ-темы

Архив блогов

< « > » Февраль 2019
Пн вт ср чт пт сб вс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28

Популярные тэги

Oracle348  база данных172  PL/SQL155  базы данных52  Linux42  Java40  Oracle Database39  SQL37  восстановление28  SQL*Plus27  администратор26  oracle25  табличное пространство22  настройка20  Unix20  таблица19  производительность18  Android17  установка15  безопасность14  программирование14  база Oracle14  данные14  UNIX14  СУБД13  управление12  создание12  транзакция12  файлы12  специалист Oracle11  команда11  определение10  ошибка10  NoSQL9  Eclipse9  обучение9  пример9  блок9  резервное копирование9  файл9  оптимизация9  память8  статистика8  сертификация8  архитектура8  процессы8  размер8  разработка8  язык8  приложение8  экземпляр8  проектирование8  время7  функция7  создать7  схема7  версии7  дата7  сервер7  таблицы7  запись7  история7  команды7  СУБД Oracle7  мониторинг7  Android Studio6  JavaScript6  программа6  Oracle 9i6  процесс6  триггер6  переменная6  видео6  оператор6  SGA6  PGA6  Oracle Policy Automation6  подключение6  11g6  резервирование6  баз данных6  Grid Control5  PostgreSQL5  запросы5  буфер5  код5  кэш5  Database Control5  возможности5  загрузка5  отмена5  IDE5  индекс5  использование5  разработчик5  блокировки5  

© 2019 Соцсеть: Базы данных Oracle, СУБД MySQL, SQL, программирование Java, APEX, администрирование

Go Top