В данной статье я вкратце опишу shell-программирование,рассмотрю
простейшие примеры и прокомментирую их.Сразу оговорюсь,что эта
статья не является исчерпывающим руководством по shell-
программированию.Но её будет достаточно чтобы освоить его основы.
Несмотря на кажущуюся простоту shell-программирования,оно является
достаточно мощным инструментом администратора unix-системы.Замечу,что
для полноценного администрирования unix-системы,уметь программировать
на shell просто необходимо.
Все примеры протестированы на системе Slackware Linux 10.2 и
полностью работоспособны.
Общие положения.
Комментарии начинаются с символа #,за исключением первой строки.
Первой строкой сценария является путь к интерпретатору,начинающийся
с #! с помошью которого будет запущен данный скрипт.Например:
#!/bin/sh
#А вот это уже комментарий
Переменные,ввод и вывод данных.
Для задания переменных используется оператор присваевания "=".Синтаксис
следующий:
<переменная>=<значение>
Замечу,что в отличие от языков perl и php,между знаком "=" и остальными
параметрами нельзя ставить пробел.В этом случае интерпретатор выдаст
ошибку.Чтобы обратится к заданной переменной ,надо вызвать её поставив
перед ней знак $.Удалить переменную можно с помощью оператора unset.
Оператор Echo просто выводит строку(или переменную), идущую после него:
>--------------------------------------<
My name is Vasya
>--------------------------------------<
В данный пример также можно добавить одинарные или двойные кавычки,
от этого результат работы программы не изменится.Но не стоит
использовать обратные кавычки,т.к.эти символы используются для
выполнения команд:
#!/bin/sh
echo `My name is Vasya"
>--------------------------------------<
Error: My: command not found
>--------------------------------------<
Оператор read присваевает значение переменной.Вот пример,который
просит ввести переменную var,считывает её а затем выводит.
#!/bin/sh
echo "Input var:"
read var
echo "The var is $var"
>--------------------------------------<
Input var:
123
The var is 123
>--------------------------------------<
Агрументы командной строки.
Как и во всех консольных программах, в shell-сценарий можно передавать
аргументы из командной строки.Переменные $1..$9 соответствуют параметрам,
переданным из командной строки сценарию.Переменная $0 содержит имя
интерпретируемого файла.$#-содержит количество переданных аргументов.
$* и $@ содержат все аргументы,но в $@ все аргументы выделены кавычками.
Напишем скрипт,который выводит 2 аргумента командной строки и имя
исполняемого файла.Запуск скрипта: ./script.sh 1 2
Данные операторы предназначены для выполнения сравнений двух значений.
Если сравнение успешно-оператор возвращает 0,иначе 1.Код завершения
последней выполненной команды хранится в специальной переменной $?.
Синтаксис:
-gt больше чем
-lt меньше чем
-ge больше чем либо равно
-le меньше чем либо равно
-eq равно
-ne не равно
Сравнение строк:
-z проверка на наличие пустой строки
-n проверка на наличие строки-значения
= равенство
!= неравенство
str проверка на наличие строки,состоящей из нулей
Логические операции:
-a И
-o ИЛИ
! НЕ
Проверка файлов:
-f установка факта существования файла и его регулярности
-s проверка,не является-ли файл пустым
-r проверка возможности считывания файла
-w проверка возможности записи файла
-x проверка исполняемости файла
-d проверка,является-ли файл каталогом
-h проверка,является-ли файл ссылкой
-c проверка,является-ли файл байт-ориентированным устройством
-d проверка,является-ли файл блок-ориентированным устройством
Условия.
Ниже описан синтаксис всех условных операторов,с примерами.
1)if <команда> then
<команда>
fi
Пример:
#!/bin/sh
if [ $1 -eq 10 ]; then
echo var=10
fi
Результат работы,при переданном параметре равном 10: