- •«Работа в ос unix/Linux и программирование на языке shell»
- •Интерпретатор команд (shell)
- •Структура команд unix
- •Простые команды
- •Стандартные ввод и вывод
- •Параметры
- •Составные команды
- •Специальные символы и подстановка значений
- •Переменные
- •Логические выражения и операторы управления
- •Оператор if:
- •Оператор while:
- •Оператор until:
- •Оператор case:
- •Оператор for:
- •Альтернативная форма оператора for:
- •Оператор select:
- •Оператор break:
- •Оператор continue:
- •Оператор shift:
- •Арифметические выражения
- •Работа пользователя в системе unix
- •Начало и завершение работы в системе
- •Запуск и выполнение команд
- •Фоновые процессы и управление заданиями
- •Скрипты
- •Некоторые команды
- •Справочные команды
- •Man [том]имя_команды
- •Info имя_команды
- •Help имя_встроенной_команды
- •Информационные команды
- •Ls [ключи] параметры
- •History [-c] [число]
- •Hostname [ключи]
- •Ps [ключи]
- •Uname [ключи]
- •Date [ключи] [новая_дата]
- •Cal [ключи] [месяц [год]]
- •Du [ключи] [список_имен]
- •Stat [список_имен]
- •Mv файл1 файл2илиmvсписок_файловкаталог
- •Find список_каталогов [ключи]
- •Rmdir [ключи] список_каталогов
- •Cat список_файлов
- •Команды для работы с данными
- •Echo [ключи] параметры
- •More [файл]
- •Sort [ключи] [-k от_поля [, до_поля]] [список_файлов]
- •Cut [ключи] [файлы]
- •Команды управления процессами
- •Testсписок_аргументов
- •Read [ключи] [список_переменных]
- •Getopts строка_ключей переменная [список_слов]
- •Примеры команд и скриптов
- •Примеры команд интерактивного режима
- •Создание текстового файла
- •Работа с файлами
- •Определить трех пользователей системы, чьи домашние каталоги с содержащимися в них файлами занимают больше всего дискового пространства
- •Примеры скриптов
- •Выдать имена всех файлов каталога-параметра и всех его подкаталогов, отступами показывая вложенность каталогов. Если параметр не задан, начать с текущего каталога.
- •Порядок выполнения работы
- •Примеры заданий на использование команд в интерактивном режиме
- •Список вариантов заданий на разработку командных файлов
- •Контрольные вопросы
Скрипты
Скрипт (командный файл) состоит в основном из тех же команд, которые могут использоваться в интерактивном режиме. В то же время управляющие операторы и некоторые другие конструкции языка shellкрайне редко употребляются в интерактивном режиме и предназначены прежде всего для программирования командных файлов.
Символ #означает, что вся следующая за ним часть строки скрипта является комментарием..
Первая строка скрипта, как правило, представляет собой комментарий специального вида, начинающийся с символов #!, сразу после которых записывается полное имя шелла, который должен быть вызван для выполнения данного скрипта. Например:
#!/bin/ksh
Указание конкретного шелла важно в том случае, если скрипт содержит команды и синтаксические конструкции, которые по-разному обрабатываются разными интерпретаторами. Это указание оформлено как комментарий, поскольку оно не является частью программы скрипта: указывается не «что делать», а «кто должен сделать».
Имеется несколько способов запустить скрипт на выполнение. Можно вызвать для этого любой из имеющихся командных интерпретаторов и передать ему имя командного файла в качестве первого параметра. В этом случае параметры командного файла должны быть указаны как последующие параметры shell, например:
$ bash script1 param1 param2
Чтобы выполнить такой вызов, достаточно иметь право на чтение командного файла, поскольку этот файл играет роль данных, которые будет читать и интерпретировать shell. Указание имени шелла в специальном комментарии в данном случае игнорируется.
Другой вариант запуска заключается в вызове скрипта как обычной команды в ответ на приглашение системы. При этом нужно, чтобы файл был размещен в одном из каталогов, перечисленных в переменной PATH. Если это не так, то надо указать путь к файлу скрипта, включающий знак/. Если скрипт расположен в текущем каталоге, то можно записать перед его именем знаки./:
$ ./script1 param1 param2
Чтобы вызов скрипта как команды мог быть выполнен, пользователь должен иметь права не только на чтение, но и на выполнение командного файла. Поскольку при создании файла в текстовом редакторе право на выполнение не устанавливается, пользователь должен перед запуском командного файла изменить набор прав, например, следующей командой:
$ chmod a+x имя_файла_скрипта
Выбор шелла для исполнения скрипта определяется специальным комментарием в первой строке файла. Если специальный комментарий отсутствует, то скрипт будет выполняться тем же шеллом, который произвел запуск скрипта, но в рамках нового процесса. Если же указано неверное имя шелла, то скрипт выполняться не будет.
В любом из описанных случаев скрипт выполняется в рамках отдельного процесса шелла, отличного от предшествовавшего шелла, запустившего скрипт. Это означает, в частности, что при работе скрипта используется отдельная копия набора переменных, поэтому никакие изменения значений переменных не сохранятся после завершения скрипта. Не сохранятся также изменение текущего каталога и перенаправление ввода-вывода, если они были сделаны в ходе работы скрипта.
Существенно иначе происходит выполнение скрипта с помощью встроенной команды .(точка). Запись «. имя_файла_скрипта» означает, что команды из файла скрипта будут выполняться текущим шеллом, без запуска нового шелла для скрипта. Это означает, что изменения значений переменных, изменение текущего каталога и перенаправление ввода-вывода, сделанные в ходе работы скрипта, сохранятся и после его завершения.