Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Изучение Linux.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.5 Mб
Скачать

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

Запустить сценарий можно командой

sh scriptname

или

bash scriptname

Не рекомендуется запуск сценария командой sh <scriptname>, поскольку это запрещает использование устройства стандартного ввода stdin в скрипте.

Более удобный вариант -- сделать файл скрипта исполняемым, командой chmod.

chmod 555 scriptname # выдача прав на чтение/исполнение любому пользователю в системе

или

chmod +rx scriptname #выдача прав на чтение/исполнение любому пользователю в системе chmod u+rx scriptname #выдача прав на чтение/исполнение только "владельцу" скрипта

После того, как вы сделаете файл сценария исполняемым, вы можете запустить его примерно такой командой

./scriptname

Если, при этом, текст сценария начинается с корректной сигнатуры ("sha-bang"), то для его исполнения будет вызван соответствующий интерпретатор.

И наконец, завершив отладку сценария, вы можете поместить его в каталог /usr/local/bin (естественно, что для этого вы должны обладать правами root), чтобы сделать его доступным для себя и других пользователей системы. После этого сценарий можно вызвать, просто напечатав название файла в командной строке и нажав клавишу [ENTER]

В общем случае при запуске скрипта запускается новый процесс. Для того, чтобы выполнить скрипт внутри текущей сессии bash, необходимо использовать команду source, синонимом которой является просто точка ".". Скрипт оболочки служит просто аргументом этой команды. Ее формат:

source filename [arguments]

или

. filename [arguments]

Эта команда читает и выполняет команды из файла с именем filename в текущем окружении и возвращает статус, определяемый последней командой из файла filename. Если filename не содержит слэша, то пути, перечисленные в переменной PATH, используются для поиска файла с именем filename. Этот файл не обязан быть исполняемым. Если в каталогах, перечисленных в PATH, нужный файл не найден, его поиск производится в текущем каталоге.

Если заданы аргументы, на время выполнения скрипта они становятся позиционными параметрами. Если аргументов нет, позиционные параметры не изменяются. Значение (статус), возвращаемое командой source, совпадает со значением, возвращаемым последней командой, выполненной в скрипте. Если ни одна команда не выполнялась, или файл filename не найден, то статус выхода равен 0.

6.3Встроенные переменные

Кроме переменных, которые можно определить в явном виде, для Shell существуют также встроенные переменные, смысл которых существует только в контексте получения ее значения.

Встроенные переменные

$1, $2, $3 ... Позиционные параметры скрипта

$# Число позиционных параметров (десятичное)

$? Код возврата предыдущего процесса

$$ PID текущего Shell

$! PID последнего процесса, запущенного в фоновом режиме

$* Все позиционные параметры скрипта, передаваемые заключенными в кавычки:

"$*" - "$1 $2 $3 ..."

$@ Все позиционные параметры скрипта, передаваемые как отдельные строки, заключенные в кавычки.

$@ - "$1" "$2" "$3" ....

Поясним встроенные переменные Shell на примере сценария.

Текст скрипта

Работа скрипта

#!/bin/sh $ ./script1.sh par1 par2 par3 echo script $0 script ./script1.sh

echo $1 $2 $3 par1 par2 par3

Программные структуры

Как во всяком языке программирования в тексте на языке shell могут быть комментарии. Для этого используется символ "#". Все, что находится в строке (в командном файле) левее этого символа, воспринимается интерпретатором как комментарий. Например,

# Это комментарий.

## И это.

### И это тоже.

Как во всяком процедурном языке программирования в языке shell есть операторы. Ряд операторов позволяет управлять последовательностью выполнения команд. В таких операторах часто необходима проверка условия, которая и определяет направление продолжения вычислений.

Команда test ("[ ]")

Команда test проверяет выполнение некоторого условия. С использованием этой (встроенной) команды формируются операторы выбора и цикла языка shell. Два возможных формата команды:

test условие

или

[ условие ]

мы будем пользоваться вторым вариантом, т.е. вместо того, чтобы писать перед условием слово "test", будем заключать условие в скобки, что более привычно для программистов. На самом деле shell будет распознавать эту команду по открывающей скобке "[", как слову(!), соответствующему команде "test". Уже этого достаточно, чтобы предупредить о распространенной ошибке начинающих: Между скобками и содержащимся в них условием обязательно должны быть пробелы.

Пробелы должны быть и между значениями и символом сравнения или операции (как, кстати, и в команде "expr"). Не путать с противоположным требованием для присваивания значений переменным.

В shell используются условия различных "типов".