- •Сценарии оболочки
- •Запуск сценария
- •Область видимости переменных
- •Средства ввода-вывода
- •Вычисление арифметических выражений
- •Управляющие конструкции
- •Условный оператор
- •Команда test
- •1. Условия проверки файлов:
- •2. Условия проверки строк:
- •3. Условия сравнения целых чисел:
- •Оператор выбора
- •Операторы цикла Язык оболочки позволяет организовывать циклическое выполнение команд. В распоряжение пользователю предлагается 4 варианта циклов: while, until, for и select.
Область видимости переменных
Каждая переменная имеет свою область видимости. Допустим, в сценарии определена некоторая переменная. Что будет с ней после завершения этого сценария, доступна ли она из других сценариев, вызываемых исходным?
В языке оболочки все переменные делятся на три категории: локальные переменные, переменные окружения и переменные оболочки.
Локальная переменная – это такая переменная, которая существует только внутри конкретного экземпляра оболочки. Она не доступна программам, запускаемым на выполнение из этой оболочки. Все рассматривавшиеся ранее переменные были локальными.
Переменная окружения – это переменная, которая доступна любой программе, запущенной из данной оболочки. Некоторые программы нуждаются в определённых переменных окружения. В таком случае в сценарии их можно определить.
Переменная оболочки – это специальная переменная, которая устанавливается оболочкой и необходима ей для корректной работы. Некоторые из них являются переменными окружения, а некоторые – локальными. В переменных с именами 1, 2, 3,… сохраняются параметры командной строки. То есть если некий сценарий script запустить в виде script something, то в его оболочке $1=something.
Переменную можно разместить в окружении, выполнив команду экспорта:
export имя_переменной
В результате выполнения следующего сценария на терминал будут выданы значения всех переменных окружения оболочки и, в том числе, переменной MY_NAME.
#!/bin/sh
MY_NAME=Sergey ; export MY_NAME;
set #это команда для вывода всех переменных окружения и их значений
Ниже в таблице приводится список некоторых стандартных переменных окружения и переменных оболочки с указанием их назначения и и примера их инициализации.
HOME содержит путь к домашнему каталогу пользователя
PATH определяет список каталогов (разделенных двоеточием), в которых оболочка ищет запускаемые на выполнение программы
MANPATH определяет список каталогов, в которых программа man ищет справочную информацию по запрошенной команде
HOSTNAME имя узла (компьютера), на котором выполняется оболочка
USER содержит имя пользователя, работающего с оболочкой в данный момент
PS1 основная строка приглашения (по умолчанию $)
PS2 дополнительная строка приглашения (по умолчанию >); в интерактивном режиме перед вводом команды оболочкой выводится основная строка приглашения. Если нажата клавиша [Enter], но для завершения команды требуется дальнейший ввод, то выводится дополнительная строка приглашения
Команда
echo ${PATH}
выведет на экран значение переменной окружения PATH, например /bin:/usr/bin.
Для добавления еще одного каталога для поиска запускаемых на выполнение программ (например /home/user) необходимо записать команду
PATH=${PATH}:/home/user
Позиционные переменные (или параметры) – это аргументы командных файлов, их именами служат цифры: $0 - имя команды, $1 - первый аргумент, $2 – второй аргумент и т.д. до $9. Значения позиционным переменным могут быть присвоены и командой set.
Например, программа prog служит для вывода максимального среди трех введенных чисел и вызывается так:
prog –d 23 45 38
Тогда позиционная переменная $0 содержит значение prog, переменная $1 – значение -d, переменная $2 – значение 23, переменная $3 – значение 45, а переменная $4 – значение 38. Значения остальных позиционных переменных будут пустыми строками.
Количество переданных программе позиционных параметров определяется с помощью конструкции $#.
Программе может быть передано программе больше 9 параметров. C помощью команды shift n выполняется смещение позиционных параметров. Значение n определяет, на сколько позиций влево необходимо сдвинуть параметры. Например, если указано shift 3, то $4 становится $1. Значение n может отсутствовать, и тогда предполагается, что n=1. В этом случае, например, $2 становится $1.
Следующие переменные автоматически устанавливаются оболочкой:
$# - количество позиционных параметров
$- - флаги, указанные при запуске оболочки или командой set
$? - десятичное значение, возвращенное предыдущей выполненной командой
$$ - номер текущего процесса
$! - номер процесса последней фоновой команды
$@ - все аргументы командной строки (эквивалентно $1 $2 $3 ...)
$* - все аргументы командной строки (эквивалентно "$1 $2 $3 ...")