Сделай Сам Свою Работу на 5

Область видимости переменных





Запуск сценария

 

Пользователю может представлять неудобство каждый раз указывать имя программы-оболочки для выполнения сценария. Для того чтобы иметь возможность выполнять сценарий, набирая только его имя, прежде всего необходимо сделать его исполняемым. Для этого необходимо установить соответствующие права доступа к файлу с помощью команды:

 

chmod +x имя_файла

 

Кроме этого, необходимо явно указать, какая оболочка должна использоваться для выполнения данного сценария. Это можно сделать, разместив в первой строке сценария последовательность символов #!путь_к_программе-оболочке. Например, если необходимо указать, что для выполнения сценария следует использовать оболочку bash, первой строкой сценария должна быть строка

 

#!/bin/bash

Сценарий может содержать комментарии. Комментарий – это оператор, который может размещаться в сценарии оболочки, но оболочкой не исполняется. Комментарий начинается с символа # и продолжается до конца строки.

Ниже приведён пример короткого сценария:

 

#!/bin/sh

date

who

 

Примечание: несколько команд в сценарии могут записываться в одну строку. В качестве разделителя между ними необходимо указывать точку с запятой (;). Например:



#!/bin/sh

date; who;

Переменные

Переменная– это программный объект, способный принимать значение. Оболочка разрешает создавать и удалять переменные, а также присваивать им значения. В большинстве случаев разработчик ответственен за управление переменными в сценариях. Использование переменных позволяет создавать гибкие, легко адаптируемые сценарии. Имена переменных определяются по тем же правилам, что и в языке программирования С.

Определяются переменные следующим образом (отсутствие пробелов до и после символа = существенно):

 

имя_переменной=значение

Все переменные по умолчанию имеют строковый тип. Например, MY_NAME=Sergeyопределяет переменную с именем MY_NAMEи присваивает ей значение Sergey. В переменной можно сохранять любое нужное значение. Особый случай – когда это значение содержит пробелы. Для правильного выполнения такого действия указанное значение достаточно заключить в кавычки.



Если переменной присвоена последовательность чисел, то значение этой переменной будет трактоваться как число. Например, а=12345. Теперь переменную а можно использовать в арифметических выражениях.

Для того чтобы получить значение переменной, перед её именем необходимо поставить знак $, а имя переменной заключить в фигурные скобки.

Например, в результате выполнения команды

 

echo a

 

на терминал выведется буква а, а в результате выполнения команды

 

echo ${a}

 

будет напечатано число 12345.

 

Примечание: при подстановке значений переменных фигурные скобки в большинстве случаев можно опускать. Но обратите внимание, что в результате выполнения команды

 

echo ${a}1

 

к значению переменной а будет дописана 1, то есть получим значение 123451, а в результате выполнения команды

 

echo $a1

 

на терминал будет выведено значение переменной a1, если она определена в программе и ничего не будет выведено, если переменная a1 не определена.

 

С помощью конструкции ${#имя_переменной} можно получить количество символов в определенной переменной (длину переменной).

С помощью конструкции ${имя_переменной:m:n} можно выделить подстроку из определенной переменной (здесь где m – номер позиции, начиная с которой будет производиться выделение подстроки, а n – количество выделяемых символов).

Примечание: значение n можно опускать. Тогда будет производиться выделение символов до конца строки.

 

В том случае, когда некоторая переменная становится ненужной, её можно удалить с помощью команды unset имя_переменной.

 

Ниже приведён пример, иллюстрирующий работу с переменными в сценариях.



 

#!/bin/bash

MY_NAME=Sergey

MY_FULL_NAME="Sergey B. Sidorov"

echo name = $MY_NAME and full name = $MY_FULL_NAME

echo Length of my full name is ${#MY_FULL_NAME} symbols

echo My surname is ${MY_FULL_NAME:10}

m=0

n=6

echo My name is ${MY_FULL_NAME:m:n} #подстановка распространяется на

#все переменные в фигурных скобках

echo ${MY_FULL_NAME:10:5}

unset MY_NAME

В результате выполнения сценарияна терминал будет выдано сообщение:

 

name = Sergey and full name = Sergey B. Sidorov

Length of my full name is 17 symbols

My surname is Sidorov

My surname is Sergey

Sidor

Все рассмотренные выше примеры переменных – это примеры скалярных переменных, то есть таких, которые могут хранить только одно значение. Наряду с ними можно использовать переменные-массивы. Доступ к элементам массива осуществляется операцией индексирования []. Язык программирования оболочки не требует предварительного объявления переменной массивом с указанием его размерности. При этом отдельные элементы массива создаются по мере доступа к ним. Ниже приведён пример работы с массивом NAME.

 

#!/bin/sh

NAME[0]=Сергей

NAME[10]=Катя

NAME[2]=Лиза

echo все имена: ${NAME[*]}

echo ${NAME[10]} и ${NAME[2]} сестры

Если вместо индекса элемента использовать *, результатом выражения будет список значений всех элементов массива (в данном случае таковых три).

 

Область видимости переменных

 

Каждая переменная имеет свою область видимости. Допустим, в сценарии определена некоторая переменная. Что будет с ней после завершения этого сценария, доступна ли она из других сценариев, вызываемых исходным?

В языке оболочки все переменные делятся на три категории: локальные переменные, переменные окружения и переменные оболочки.

Локальная переменная– это такая переменная, которая существует только внутри конкретного экземпляра оболочки. Она не доступна программам, запускаемым на выполнение из этой оболочки. Все рассматривавшиеся ранее переменные были локальными.

Переменная окружения– это переменная, которая доступна любой программе, запущенной из данной оболочки. Некоторые программы нуждаются в определённых переменных окружения. В таком случае в сценарии их можно определить.

Переменная оболочки– это специальная переменная, которая устанавливается оболочкой и необходима ей для корректной работы. Некоторые из них являются переменными окружения, а некоторые – локальными. В переменных с именами 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 ...")

 

 

Средства ввода-вывода

 

Задачи ввода–вывода могут быть решены посредством использования специальных команд echo и read.

Команда echo выдаёт на стандартное устройство вывода значения всех своих параметров.

Команда read имя1 имя2 ... имяN считывает со стандартного устройства ввода строку, выделяет из неё отдельные слова (группы символов, отделяемые пробелами) и каждое слово заносит в указанные в качестве параметров соответствующие переменные. При этом если переменных меньше, чем выделенных слов, то в последнюю из них будет занесена оставшаяся часть строки.

В качестве примера приведён сценарий, в котором от пользователя запрашивается строка, после чего она выводится на терминал. Параметр –n запрещает перевод на следующую строку по окончании вывода командой echo, разрешённый по умолчанию.

 

#!/bin/sh

echo –n Input your name:

read INPUT

echo Hello, $INPUT !

 

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.