- •«Работа в ос 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 строка_ключей переменная [список_слов]
- •Примеры команд и скриптов
- •Примеры команд интерактивного режима
- •Создание текстового файла
- •Работа с файлами
- •Определить трех пользователей системы, чьи домашние каталоги с содержащимися в них файлами занимают больше всего дискового пространства
- •Примеры скриптов
- •Выдать имена всех файлов каталога-параметра и всех его подкаталогов, отступами показывая вложенность каталогов. Если параметр не задан, начать с текущего каталога.
- •Порядок выполнения работы
- •Примеры заданий на использование команд в интерактивном режиме
- •Список вариантов заданий на разработку командных файлов
- •Контрольные вопросы
Структура команд unix
Простые команды
Базовой конструкцией языка команд UNIX(языкаshell) являетсяпростая команда. Она состоит из имени команды и, возможно, параметров, разделенных пробелами, и перенаправлений. Небольшое количествовстроенныхкоманд выполняются непосредственно шеллом. Остальные команды называютсявнешними. Имя внешней команды – это имя исполняемого файла (либо двоичной программы, либо шелл-скрипта), хранящегося в одном из каталогов, перечисленных в переменнойPATH.
Для выполнения внешней команды шелл запускает отдельный процесс. В результате выполнения команды вырабатывается код завершенияпроцесса, который может затем быть проанализирован. Нулевое значение кода обычно означает нормальное завершение, значение, большее нуля – ошибку. Если выполнение команды было прервано вследствие получения сигнала, то код завершения равен 128 +номер сигнала. Код 127 означает «файл команды не найден», а код 126 – «файл команды не является исполняемым».
Существенное различие между встроенными и внешними командами заключается в том, что особенности синтаксиса и семантики встроенных команд могут разниться в зависимости от используемой версии шелла (sh,ksh,csh,bashи другие), в то время как набор и особенности внешних команд связаны с используемой версией операционной системы (BSD UNIX,SVR4,Linuxи т.п.).
Стандартные ввод и вывод
Большинство команд UNIXвыводят результат своей работы в текстовом виде настандартный вывод. По умолчанию это означает, что результаты выводятся на терминал, с которого запущена команда. Однако стандартный вывод легко может быть перенаправлен в файл или на устройство. ВUNIXимена устройств перечислены в одном из каталогов файловой системы (обычно в каталоге/dev) в качестве специальных файлов.
Несколько реже используется стандартный вывод ошибок. В принципе, он совсем не обязательно содержит сообщение об ошибке, а может использоваться во всех случаях, когда программист не хочет, чтобы выводимые данные были перенаправлены в файл вместе с остальными данными стандартного вывода.
Многие команды используют также стандартный ввод, который по умолчанию означает данные, вводимые с клавиатуры терминала. Признаком конца ввода служит комбинацияCtrl+D. Как часто встречающийся вариант, в команде может быть предусмотрено задание имени одного или нескольких файлов с исходными данными, но если ни одно имя не задано, то используется стандартный ввод. Он также может быть перенаправлен для чтения данных из файла, с устройства или даже непосредственно из текста команды.
Как правило, стандартный вывод команд UNIXимеет как можно более регулярную структуру. Например, команда просмотра каталога «ls –l»выдает в каждой строке информацию об одном файле, без общего заголовка и без итоговых данных. Очень часто вывод команды выглядит как таблица, столбцы которой разделены знаками табуляции. Это облегчает последующую обработку выведенных данных следующими командами. Из тех же соображений команды не выдают лишних сообщений типа «Команда успешно выполнена», хотя могут выдавать сообщения об ошибках.
С точки зрения программирования в UNIX, стандартный ввод – это данные, которые будут вводиться, если в функции ввода указан описатель (хэндл) 0, стандартному выводу соответствует хэндл 1, а стандартному выводу ошибок – хэндл 2. В языках высокого уровня стандартные ввод и вывод используются, когда при вызове функции чтения или записи не указан файл. Для вывода ошибок обычно имеется отдельная функция.
Перенаправление представляет собой указание, что при выполнении команды следует вместо текущего устройства стандартного ввода, стандартного вывода или стандартного отображения ошибок использовать иной указанный файл (или устройство). Перенаправление выполняется перед запуском команды, оно не передается команде в качестве параметра.
Если стандартный вывод некоторой команды не представляет ценности, его можно перенаправить на фиктивное устройство /dev/null.
Основными формами перенаправления являются следующие:
> файл |
Стандартный вывод команды направляется в указанный файл. |
>> файл |
То же самое, но, если файл уже существует, то стандартный вывод добавляется в его конец. |
< файл |
Стандартный ввод команды берется из указанного файла. |
<< слово ... входной документ ... слово |
Перенаправление типа «документ здесь». Слово, заданное после <<, рассматривается как ограничитель данных. Следующие строки содержат данные стандартного ввода. Концом данных будет строка, содержащая только слово-ограничитель. |
2>&1 |
Стандартный вывод ошибок направляется на текущий стандартный вывод. |
Пробел после знаков перенаправления >,>>,<,<<допускается, но не обязателен.
Если в одной команде задано несколько перенаправлений, то они выполняются слева направо, при этом результат может зависеть от порядка. Например, «>file1 2>&1» – это не то же самое, что «2>&1 >file1».