
- •«Работа в ос 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 строка_ключей переменная [список_слов]
- •Примеры команд и скриптов
- •Примеры команд интерактивного режима
- •Создание текстового файла
- •Работа с файлами
- •Определить трех пользователей системы, чьи домашние каталоги с содержащимися в них файлами занимают больше всего дискового пространства
- •Примеры скриптов
- •Выдать имена всех файлов каталога-параметра и всех его подкаталогов, отступами показывая вложенность каталогов. Если параметр не задан, начать с текущего каталога.
- •Порядок выполнения работы
- •Примеры заданий на использование команд в интерактивном режиме
- •Список вариантов заданий на разработку командных файлов
- •Контрольные вопросы
Параметры
Параметры команды – это произвольные слова, т.е. последовательности символов, разделенные пробелами или табуляциями. Строка в кавычках также считается одним словом, даже если она содержит пробелы. Смысл параметров определяется форматом конкретной команды. Чаще всего используются два типа параметров: во-первых, имена обрабатываемых файлов и каталогов, и во-вторых, ключи (опции). Имя может содержать полный путь к файлу или каталогу, при этом имена вложенных каталогов разделяются символом /. Если путь не задан, подразумевается текущий каталог. Ключи позволяют модифицировать действие команды или формат данных. Как правило, ключ начинается с символа -, за которым обычно следует одна буква. Допускается совместное задание нескольких ключей, т.е., например, запись-abcравносильна трем ключам-a -b -c.
В записи имен и ключей учитывается регистр букв (прописные отличаются от строчных).
Помимо непосредственного задания параметров в виде строки, есть возможность использовать различные выражения, задающие строковые значения. Способы задания выражений будут описаны ниже.
Составные команды
Составная команда состоит из простых команд, соединенных в виде конвейера или списка.
Конвейерсостоит из нескольких команд, разделенных знаками|. Для выполнения конвейера шелл запускает одновременно работающие процессы для каждой команды, при этом стандартный вывод каждой команды перенаправляется на стандартный ввод следующей. Код завершения конвейера вырабатывается только после завершения всех процессов, и он равен коду завершения последней по порядку команды конвейера. Если в начале конвейера записан знак!, код завершения инвертируется (0 заменяется на 1, остальные значения заменяются на 0).
Далее для краткости под словом «команда» будем понимать простую команду или конвейер.
Перед командой может стоять ключевое слово «time –p». В этом случае после выполнения команды система выдает на стандартный вывод ошибок данные о затраченном времени: полное времяreal(по часам, от запуска до завершения), процессорное время в обычном режиме (user) и в системном режиме (system). Если ключ–pне указан, данные выдаются в более сложном, настраиваемом формате.
Списоксостоит из нескольких команд, разделенных знаками;,&,&&или||. В конце списка может стоять необязательный знак;,&или конец строки.
Если две команды разделены знаком ;, то они выполняются последовательно: следующая команда запускается только после завершения предыдущей. Код завершения списка команд будет равен коду завершения последней команды.
Смысл знака &будет рассмотрен позднее.
Если команды в списке разделены знаком &&, то следующая будет выполняться только в том случае, если код завершения предыдущей равен 0 (нормальное завершение). Напротив, знак||означает, что следующая команда будет выполняться только в том случае, если код завершения предыдущей не равен 0 (завершение с ошибкой).
При разборе шеллом командной строки приоритет операций &&и||выше, чем у&и;, а приоритет&выше, чем;.
Для изменения порядка обработки можно заключать часть списка команд в скобки. Можно использовать два вида скобок:
Круглые скобки: (команды). Для выполнения команд запускается отдельный экземпляр шелла, работающий с отдельным набором переменных среды. Это приводит к тому, что все изменения значений переменных, сделанные при выполнении списка команд в скобках, теряются после его завершения.
Фигурные скобки: { команды;}. В этом случае список команд выполняется текущим шеллом. Наличие скобок влияет только на порядок обработки разделителей|,;,&,&&и др. Пробел после открывающей фигурной скобки и ;перед закрывающей скобкой обязательны для избежания синтаксической неоднозначности.