Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Переменные-параметры перечислены в табл. 2.3.

Таблица 2.3

Переменная-параметр Описание
$1
,
$2
, ...
Параметры, передаваемые сценарию
$*
Список всех параметров в единственной переменной, разделенных первым символом из переменной окружения
IFS
. Если
IFS
корректируется, способ разделения командной строки на параметры в переменной
$*
изменяется
$@
Едва различимая вариация
$*
; не использует переменную окружения
IFS
, поэтому параметры не сольются, даже если переменная
IFS
пуста

Легче всего увидеть разницу между переменными-параметрами

$*
и
$@
, опробовав их.

$ IFS=''

$ set foo bar bam

$ echo "$@"

foo bar bam

$ echo "$*"

foobarbam

$ unset IFS

$ echo "$*"

foo bar bam

Как видите, заключенная в двойные кавычки переменная-параметр

$@
представляет позиционные параметры как отдельные поля, независимо от значения переменной окружения
IFS
. Как правило, если вы хотите получить доступ к параметрам, лучше использовать переменную-параметр.

Помимо вывода на экран содержимого переменных с помощью команды

echo
, вы также можете прочитать его командой
read
(упражнение 2.2).

Упражнение 2.2. Манипулирование параметрами и переменными окружения

В приведенном далее сценарии показано несколько простых манипуляций переменными. После ввода сценария и записи его в файл try_var не забудьте превратить его в исполняемый файл с помощью команды

chmod +х try_var
.

#!/bin/sh

salutation="Hello"

echo $salutation

echo "The program $0 is now running"

echo "The second parameter was $2"

echo "The first parameter was $1"

echo "The parameter list was

echo "The user's home directory is $HOME"

echo "Please enter a new greeting"

read salutation

echo $salutation

echo "The script is now complete"

exit 0

Если вы выполните этот сценарий, то получите следующий вывод:

$ ./try_var foo bar baz

Hello

The program ./try_var is now running

The second parameter was bar

The first parameter was foo

The parameter list was foo bar baz

The user's home directory is /home/rick

Please enter a new greeting

Sire

Sire

The script is now complete $

Как это работает

Сценарий создает переменную

salutation
, выводит на экран ее содержимое и затем показывает, что уже сформированы и имеют соответствующие значения различные переменные-параметры и переменная окружения
$НОМЕ
.

Далее в этой главе мы рассмотрим более подробно подстановку параметров.

Условия

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

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

Команда test или [

На практике в большинстве сценариев широко используется команда

[
или
test
— логическая проверка командной оболочки. В некоторых системах команды
[
и
test
— синонимы, за исключением того, что при использовании команды
[
для удобочитаемости применяется и завершающая часть
]
. Наличие команды
[
может показаться странным, но в программном коде она упрощает синтаксис и делает его более похожим на другие языки программирования.

Примечание

Эти команды в некоторых ранних оболочках UNIX вызывают внешнюю программу, но в более современных версиях их стараются делать встроенными. Мы вернемся к этому, когда будем рассматривать команды в следующем разделе.

Поскольку команда

test
не часто применяется за пределами сценариев командной оболочки, многие пользователи ОС Linux, никогда раньше не писавшие сценариев, пытаются создавать простые программы и называют их test. Если такая программа не работает, вероятно, она конфликтует с командой оболочки
test
. Для того чтобы выяснить, есть ли в вашей системе внешняя команда с данным именем, попытайтесь набрать что-нибудь вроде
which test
и проверить, какая именно команда
test
выполняется в данный момент, или используйте форму
./test
, чтобы быть уверенным в том, что вы выполняете сценарий из текущего каталога. Если сомневаетесь, примите за правило выполнять свои сценарии, предваряя при запуске их имена комбинацией символов
./
.

Мы представим команду

test
на примере одного простейшего условия: проверки наличия файла. Для нее понадобится следующая команда:
test -f <имя_файла>
, поэтому в сценарии можно написать

if test -f fred.c

then

 ...

fi

To же самое можно записать следующим образом:

if [ -f fred.c ]

then

 ...

Поделиться:
Популярные книги

Егерь. Системный зверолов

Скиба Николай
1. Зверолов
Фантастика:
рпг
уся
фэнтези
фантастика: прочее
попаданцы
6.50
рейтинг книги
Егерь. Системный зверолов

Неучтенный

Муравьёв Константин Николаевич
1. Неучтенный
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
8.25
рейтинг книги
Неучтенный

Второгодка. Книга 3. Ученье свет

Ромов Дмитрий
3. Второгодка
Фантастика:
городское фэнтези
сказочная фантастика
альтернативная история
5.00
рейтинг книги
Второгодка. Книга 3. Ученье свет

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Переговоры

Форсайт Фредерик
Детективы:
политические детективы
5.75
рейтинг книги
Переговоры

Диверсант

Вайс Александр
2. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Диверсант

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Гримуар темного лорда III

Я все еще не царь. Книга XXVI

Дрейк Сириус
26. Дорогой барон!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Я все еще не царь. Книга XXVI

Арбан Саеш. Трилогия

Малицкий Сергей Вацлавович
50. В одном томе
Фантастика:
фэнтези
8.17
рейтинг книги
Арбан Саеш. Трилогия

Газлайтер. Том 29

Володин Григорий Григорьевич
29. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
6.25
рейтинг книги
Газлайтер. Том 29

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Сара

Лерой Дж. Т.
Проза:
современная проза
контркультура
6.60
рейтинг книги
Сара

Сюжет

Синицын Олег Геннадьевич
Фантастика:
научная фантастика
5.75
рейтинг книги
Сюжет

Буря

Эренбург Илья Григорьевич
Проза:
военная проза
советская классическая проза
6.25
рейтинг книги
Буря