- •«Работа в ос 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 строка_ключей переменная [список_слов]
- •Примеры команд и скриптов
- •Примеры команд интерактивного режима
- •Создание текстового файла
- •Работа с файлами
- •Определить трех пользователей системы, чьи домашние каталоги с содержащимися в них файлами занимают больше всего дискового пространства
- •Примеры скриптов
- •Выдать имена всех файлов каталога-параметра и всех его подкаталогов, отступами показывая вложенность каталогов. Если параметр не задан, начать с текущего каталога.
- •Порядок выполнения работы
- •Примеры заданий на использование команд в интерактивном режиме
- •Список вариантов заданий на разработку командных файлов
- •Контрольные вопросы
Оператор if:
if список_команд1; then список_команд2; [ elif список_команд3; then список_команд4; ] ... [ else список_командN; ] fi
Здесь квадратные скобки – не символы языка shell, а указание на необязательные части оператора. Символы;можно опускать, если в данном месте выполняется переход на новую строку. Любой из списков может, разумеется, состоять из единственной команды.
Семантику оператора ifвряд ли нужно пояснять.
Оператор ifможет быть записан либо в одной строке, либо в нескольких строках скрипта. Конец строки синтаксически равнозначен символу;. Допускается (хотя вряд ли может принести большую пользу) использованиеifпри интерактивном вводе команд. Если пользователь не завершил ввод оператора в одной строке, то будет выдаваться вторичное приглашениеshell, пока пользователь не введетfi.
Оператор while:
while список_команд1; do список_команд2; done
Здесь все очевидно. Внутри списка команд могут использоваться встроенные команды breakиcontinue(см. ниже)
Оператор until:
until список_команд1; do список_команд2; done
Отличается от цикла whileтолько знаком проверяемого условия. Как и дляwhile, проверка выполняется до выполнения.
Оператор case:
case слово in [ [(] шаблон1 [| шаблон2]...) список_команд ;;] ... esac
Несколько запутанное описание синтаксиса можно иллюстрировать следующим простым примером, позаимствованным из документации Linux. В этом примере переменнаяANIMALсодержит название животного, а кусок скрипта выдает на стандартный вывод фразу о количестве ног, например: “The man has two legs.”
echo -n "The $ANIMAL has "
case $ANIMAL in
horse | dog | cat) echo -n "four";;
man | kangaroo ) echo -n "two";;
*) echo -n "an unknown number of";;
esac
echo " legs."
Значение заданного слова (в данном случае $ANIMAL) сравнивается по очереди с шаблонами, при этом знак|требует соответствия хотя бы одному из перечисленных шаблонов. При сравнении действуют обычные правила для символов*,?и[…], поэтому шаблону*соответствует любое слово, которому не нашлось соответствия в предыдущих шаблонах. После знака)следует список команд, выполняемых для соответствующих шаблонов. Этот список завершается символами;;. После выполнения списка завершается и выполнение оператораcase(как в Паскале, а не как вC).
Оператор for:
for переменная [in список_слов]; do список_команд; done
Выполнение цикла forзаключается в том, что переменная принимает по очереди все значения, перечисленные в списке слов, и для каждого значения выполняется заданный список команд. Если конструкция “in список_слов” опущена, то вместо нее используется список всех параметров скрипта.
Если в списке слов используются шаблоны с символами подстановки *,?и[…], то они заменяются соответствующими именами файлов.
Альтернативная форма оператора for:
for (( выраж1 ; выраж2 ; выраж3 )) ; do список_команд; done
Эта форма оператора for, поддерживаемаяbash, немного напоминает одноименный оператор языкаC. Вначале вычисляется арифметическое выражение 1. Правила вычислений будут описаны ниже, однако следует отметить, что при вычислении могут, в частности, выполняться и присваивания значений переменным. Затем циклически выполняются следующие действия: вычисляется значение выражения 2; если это значение не равно нулю, то выполняется список команд; затем вычисляется выражение 3. Выполнение цикла завершается, когда значение выражения 2 становится равным нулю.
Любые из трех выражений могут быть опущены, при этом значение опущенного выражения считается равным константе 1.