- •«Работа в ос 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 строка_ключей переменная [список_слов]
- •Примеры команд и скриптов
- •Примеры команд интерактивного режима
- •Создание текстового файла
- •Работа с файлами
- •Определить трех пользователей системы, чьи домашние каталоги с содержащимися в них файлами занимают больше всего дискового пространства
- •Примеры скриптов
- •Выдать имена всех файлов каталога-параметра и всех его подкаталогов, отступами показывая вложенность каталогов. Если параметр не задан, начать с текущего каталога.
- •Порядок выполнения работы
- •Примеры заданий на использование команд в интерактивном режиме
- •Список вариантов заданий на разработку командных файлов
- •Контрольные вопросы
Testсписок_аргументов
Выполняет вычисление логического выражения, задаваемого списком слов-аргументов. При использовании bashвместо командыtestудобнее записывать выражения в квадратных скобках (см. 2.3.7), однакоtest– более стандартное средство, имеющееся в разных версиях шелла.
Read [ключи] [список_переменных]
Читает строку со стандартного ввода и присваивает переменным из списка значения слов из этой строки.
Если слов больше, чем переменных, то последняя переменная получает значение всего остатка строки. Если слов меньше, чем переменных, то лишние переменные получают пустые значения.
Ключ –p приглашениевыдает указанное приглашение к вводу строки (при условии, что стандартный ввод связан с терминалом, а не с файлом).
Ключ –a имя_массивавызывает присваивание введенных слов элементам указанного массива, начиная с индекса 0. Список переменных в этом случае игнорируется. Если указанный массив не определен, то он создается при выполненииread.
Getopts строка_ключей переменная [список_слов]
Эта команда предназначена для облегчения разбора ключей, с которыми был вызван скрипт, содержащий getopts. В строке ключей следует перечислить все ключи, предусмотренные для данного скрипта. Предполагается, что ключи состоят из одной буквы или цифры, перед которой стоит знак-. Если ключ должен сопровождаться аргументом (например, числом или именем файла), то в строке ключей после соответствующего символа следует записать знак:.
При каждом вызове команда заносит в указанную переменную символ очередного ключа из командной строки вызова скрипта, в стандартную переменную OPTARG– значение аргумента ключа (если есть аргумент), а в переменнуюOPTIND– порядковый номер параметра командной строки, содержащего найденный ключ.
Если ключей больше нет, то getoptsвозвращает ненулевой код завершения, аOPTINDуказывает на следующий за ключами параметр командной строки.
Если задан список аргументов команды getopts, то вместо параметров командной строки анализируется список слов-аргументов.
Примеры команд и скриптов
Примеры команд интерактивного режима
Создание текстового файла
Простейший способ создать небольшой файл – использовать команду echoс перенаправлением стандартного вывода:
$ echo -e "Hello!\nHow are you?" > hello
Другой вариант – использовать команду cat, опять-таки с перенаправлением вывода. Текст файла можно задать как стандартный ввод, содержащийся в тексте команды (в режиме «документ здесь»):
$ cat > hello << _TEXT_
> Hello!
> How are you?
> _TEXT_
Здесь в качестве ограничителя текста можно использовать любое слово, не встречающееся в этом тексте.
Еще один вариант – команда с перенаправлением стандартного вывода, но без перенаправления стандартного ввода. После ввода команды «cat > hello» шелл будет принимать вводимые строки текста, пока пользователь не введет комбинациюCtrl+D(конец файла).
Здесь не рассматривается такой наиболее обычный способ создания файлов, как использование текстовых редакторов, входящих в состав UNIX.
Работа с файлами
Чтобы выдать список всех имен файлов текущего каталога, можно с равным успехом использовать либо команду «echo *», либо командуlsбез параметров. Имена будут выданы в одну строку и разделены пробелами. Если нужен иной (не текущий) каталог, можно указать его имя, например: «echo home/student/*» или «lshome/student».
Команда «ls -l» выдает имена файлов по одному в строке, сопровождая имена основной информацией о файлах.
Если нужно выдать лишь имена файлов, соответствующие некоторому шаблону, то следует указать в команде требуемый шаблон, например: «ls a*[123]» – выдать все имена файлов, начинающиеся с буквыaи заканчивающиеся одной из цифр1,2или3.
Команда catвыдает уже не имена, а содержимое заданных файлов. Например, «cat * > sumfile» означает: «объединить содержимое всех файлов текущего каталога и записать результат в файлsumfile».
Рассмотрим в качестве объекта экспериментов файл /etc/passwd. Ниже приведено несколько строк из этого файла.
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
operator:x:11:0:operator:/root:
games:x:12:100:games:/usr/games:
nobody:x:99:99:Nobody:/:
student:x:501:501:Student:/home/student:/bin/bash
Каждая запись состоит из 7 полей, разделенных двоеточиями. Чтобы, например, отсортировать файл по полным именам пользователей (поле 5), следует выполнить команду «sort –k 5,5 –t ':' /etc/passwd».
Чтобы выдать только строки, касающиеся пользователей, для которых при входе не запускается никакой шелл, можно использовать команду «grep ':$' /etc/passwd» (ищутся строки, в которых последним символом является двоеточие).
Чтобы выделить из списка только имена входа пользователей, можно воспользоваться командой «cut –f 1 /etc/passwd».
Чтобы выдать данные о трех первых по алфавиту пользователях, можно использовать конвейер: «sort /etc/passwd | head –n 3»