- •«Работа в ос 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 строка_ключей переменная [список_слов]
- •Примеры команд и скриптов
- •Примеры команд интерактивного режима
- •Создание текстового файла
- •Работа с файлами
- •Определить трех пользователей системы, чьи домашние каталоги с содержащимися в них файлами занимают больше всего дискового пространства
- •Примеры скриптов
- •Выдать имена всех файлов каталога-параметра и всех его подкаталогов, отступами показывая вложенность каталогов. Если параметр не задан, начать с текущего каталога.
- •Порядок выполнения работы
- •Примеры заданий на использование команд в интерактивном режиме
- •Список вариантов заданий на разработку командных файлов
- •Контрольные вопросы
Оператор select:
select переменная [in список_слов]; do список_команд; done
При выполнении оператора selectшелл выдает меню, состоящее из заданного списка слов. Перед каждым словом указан его номер в списке. Для выдачи меню используется стандартный вывод ошибок (хэндл 2), поэтому меню появляется на экране, даже если стандартный вывод (хэндл 1) перенаправлен в файл. Затем выдается приглашение к вводу (PS3) и со стандартного ввода считывается число, введенное пользователем. Если это число равно номеру одного из слов – пунктов меню, то это слово присваивается переменной, после чего выполняется заданный список команд. При вводе любой другой непустой строки переменная получает пустое значение. Если пользователь ввел пустую строку, то выдача меню и приглашения повторяется.
Введенная строка сохраняется в системной переменной REPLY.
Выдача меню и запрос номера пункта повторяется циклически, пока пользователь не введет признак конца файла (Ctrl+D).
Если в ответ на очередное приглашение введена пустая строка, то выдача меню и приглашения повторяется.
Если в списке слов используются шаблоны с символами подстановки *,?и[…], то они заменяются соответствующими именами файлов.
Если конструкция “in список_слов” опущена, то вместо нее используется список всех параметров скрипта.
Оператор break:
break [число]
Вызывает досрочный выход из любого из операторов цикла while,until,forилиselect. Если указан параметр – положительное число, то выход происходит сразу из указанного числа вложенных операторов цикла.
Оператор continue:
continue [число]
Вызывает досрочный переход на следующую итерацию любого из операторов цикла while,until,forилиselect. Если указан параметр – положительное числоN, то происходит выход изN-1 вложенных операторов цикла и переход на следующую итерациюN-го цикла.
Оператор shift:
shift [число]
Вызывает сдвиг нумерации позиционных параметров скрипта: параметр %2становится параметром%1, параметр%3– параметром%2и т.д. Прежний параметр%1становится при этом недоступным. Если в командеshiftуказан аргумент – неотрицательное числоN, то сдвиг происходит сразу наNединиц.
Команда удобна при программировании циклов обработки позиционных параметров скрипта.
Арифметические выражения
Как было сказано выше, все переменные языка shellимеют строковые значения. Арифметика не является сильной сторонойshell, однако в некоторых ситуациях удобно рассматривать значения переменных как строковые представления целых чисел и выполнять операции над этими числами. Это может быть полезно, например, для генерации имен файлов, различающихся только номерами, для организации выполнения циклов по счетчику и т.п.
В ранних версиях системы использование арифметических выражений было ограничено рамками специальной встроенной команды «let выражение» (подобно тому, как для логических выражений использовалась командаtest). Вbashможно также заключить выражение в двойные круглые скобки:((строка)). При этом строка будет рассматриваться как арифметическое выражение. В целом же конструкция в двойных скобках рассматривается как команда, выполнение которой заключается в вычислении выражения (в том числе с возможными присваиваниями значений переменным), а код завершения равен 1, если значение выражения равно 0, и равен 0 в противном случае.
Конструкция $((строка))означает строковое представление результата вычисления арифметического выражения.
Первичными конструкциями арифметических выражений являются слова, представляющие целые числа, а также переменные, которые должны содержать такие слова. По умолчанию используется десятичная система счисления. Если запись числа начинается с цифры 0, то число рассматривается как восьмеричное, а если с символов0xили0X– как шестнадцатеричное.
Синтаксис арифметических выражений bashочень сильно напоминает синтаксис выражений языкаC. Ниже приведена таблица арифметических операций, расположенных в порядке понижения приоритета.
Приоритет |
Формат |
Смысл |
|
переменная++ переменная-- |
Пост-инкремент и пост-декремент значения переменной |
|
++переменная --переменная |
Пре-инкремент и пре-декремент значения переменной |
|
- + |
Унарные минус и плюс |
|
! ~ |
Логическое отрицание Поразрядная инверсия |
|
** |
Возведение в степень |
|
* / % |
Умножение Деление Остаток от деления |
|
+ - |
Сложение Вычитание |
|
<< >> |
Сдвиг влево Сдвиг вправо |
|
<= >= < > |
Сравнения на «больше/меньше» |
|
== != |
Сравнения на равенство/неравенство |
|
& |
Поразрядная конъюнкция |
|
^ |
Поразрядное исключающее ИЛИ |
|
| |
Поразрядная конъюнкция |
|
&& |
Логическое И |
|
|| |
Поразрядная дизъюнкция |
|
выраж1 ? выраж2 : выраж3 |
Условное выражение |
|
= *= /= %= += -= <<= >>= &= ^= |= |
Присваивания |
|
выраж1 , выраж2 |
Последовательное вычисление выражений |
Внутри арифметических выражений не обязательно использовать символ $для обращения к значению переменной. Для изменения порядка вычислений можно использовать обычные круглые скобки.