Шрифт:
Интервал:
Закладка:
function name () {list}
Причем слово function не обязательно, name определяет имя функции, по которому к ней можно обращаться, а тело функции состоит из списка команд list, находящегося между {и}. Этот список команд выполняется каждый раз, когда имя name задано как имя вызываемой команды. Отметим, что функции могут задаваться рекурсивно, так что разрешено вызывать функцию, которую мы задаем, внутри нее самой.
Функции выполняются в контексте текущей оболочки: для интерпретации функции новый процесс не запускается (в отличие от выполнения скриптов оболочки).
АргументыКогда функция вызывается на выполнение, аргументы функции становятся позиционными параметрами (positional parameters) на время выполнения функции. Они именуются как $n, где n - номер аргумента, к которому мы хотим получить доступ. Нумерация аргументов начинается с 1, так что $1 - это первый аргумент. Мы можем также получить все аргументы сразу с помощью $*, и число аргументов с помощью $#. Позиционный параметр 0 не изменяется.
Если в теле функции встречается встроенная команда return, выполнение функции прерывается и управление передается команде, стоящей после вызова функции. Когда выполнение функции завершается, позиционным параметрам и специальному параметру # возвращаются те значения, которые они имели до начала выполнения функции.
Локальные переменные (local)Если мы хотим создать локальный параметр, можно использовать ключевое слово local. Синтаксис ее задания точно такой же, как и для обычных параметров, только определению предшествует ключевое слово local: local name=value.
Вот пример задания функции, реализующей упоминавшуюся выше команду seq:
seq()
{
local I=$1;
while [$2!= $I]; do
{
echo -n "$I ";
I=$(($I + 1))
};
done;
echo $2
}
Обратите внимание на опцию -n оператора echo, она отменяет переход на новую строку. Хотя это и несущественно для тех целей, которые мы здесь имеем в виду, это может оказаться полезным для использования функции в других целях.
Функция вычисления факториала factЕще один пример:
fact()
{
if [$1 = 0]; then
echo 1;
else
{
echo $(($1* $(fact $(($1 - 1)))))
};
fi
}
Это функция факториала, пример рекурсивной функции. Обратите внимание на арифметическое расширение и подстановку команд.
5.9. Скрипты оболочки и команда source
Скрипт оболочки - это просто файл, содержащий последовательность команд оболочки. Подобно функциям, скрипты можно выполнять как обычные команды. Синтаксис доступа к аргументам такой же, как и для функций.
В общем случае при запуске скрипта запускается новый процесс. Для того, чтобы выполнить скрипт внутри текущей сессии bash, необходимо использовать команду source, синонимом которой является просто точка ".". Скрипт оболочки служит просто аргументом этой команды. Ее формат:
source filename [arguments]
или
. filename [arguments]
Эта команда читает и выполняет команды из файла с именем filename в текущем окружении и возвращает статус, определяемый последней командой из файла filename. Если filename не содержит слэша, то пути, перечисленные в переменной PATH, используются для поиска файла с именем filename. Этот файл не обязан быть исполняемым. Если в каталогах, перечисленных в PATH, нужный файл не найден, его поиск производится в текущем каталоге.
Если заданы аргументы, на время выполнения скрипта они становятся позиционными параметрами. Если аргументов нет, позиционные параметры не изменяются. Значение (статус), возвращаемое командой source, совпадает со значением, возвращаемым последней командой, выполненной в скрипте. Если ни одна команда не выполнялась, или файл filename не найден, то статус выхода равен 0.
5.10. Команда sh
Вы всегда можете запустить новый экземпляр оболочки bash, дав команду bash или sh. При этом можно заставить новый экземпляр оболочки выполнить какой-то скрипт, если передать имя скрипта в виде аргумента команды bash. Так, для выполнения скрипта myscript надо дать команду "sh myscript".
Если вы заглянете в какой-нибудь файл, задающий скрипт (таких файлов в системе очень много), вы увидите, что первая строка в нем имеет вид: #!/bin/sh. Это означает, что когда мы запускаем скрипт на выполнение как обычную команду, /bin/sh будет выполнять ее для нас. Можно заменить эту строку ссылкой на любую программу, которая будет читать файл и исполнять соответствующие команды. Например, скрипты на языке Perl начинаются со строки вида #!/bin/perl.
Отметим также, что символ # служит для выделения в скриптах комментариев. Все, что стоит в текущей строке после этого символа и до символа конца строки, оболочка будет считать комментариями и игнорировать (т. е. оболочка не рассматривает этот текст как команды). Если хотите убедиться в действии этого символа, введите в командной строке любую команду, поставив перед ней символ #, например, "# ls", и вы увидите, что команда игнорируется оболочкой.
На этом мы завершим сокращенное описание оболочки bash. Конечно, за рамками этого описания остались многие важные вопросы, например, управление процессами, описания встроенных команд, история команд, описание библиотеки readline, сигналы и т. д. Часть этих вопросов будет отражена в последующих разделах, а остальное вы должны искать в других руководствах или на странице man bash.[15]
Глава 6. Программа Midnight Commander
6.1. Установка программы Midnight Commander
Хотя для управления файловой системой и вообще для работы с файлами можно использовать такие команды операционной системы, как pwd, ls, cd, mv, mkdir, rmdir, cp, rm, cat, more и т. д., гораздо удобнее делать большую часть работы по обслуживанию файловой системы с помощью программы Midnight Commander, которая наглядно представляет все выполняемые действия, облегчая тем самым выполнение указанных операций.
Midnight Commander (или просто mc) - это программа, которая позволяет просмотреть структуру каталогов и выполнить основные операции по управлению файловой системой. Другими словами, это файловый менеджер. Если вы имеете опыт работы с Norton Commander (nc) в MS-DOS или с FAR в Windows, то вы легко сможете работать и с mc, поскольку даже основные комбинации "горячих клавиш" у них совпадают. В этом случае для того, чтобы работать с Midnight Commander, вам достаточно бегло просмотреть приводимый ниже материал. Для тех же, кто не знаком с nc или FAR (да есть ли такие?), рекомендую внимательно проработать этот раздел, потому что Midnight Commander существенно облегчает работу с операционной системой.
Примечание
Приводимое в данной главе описание составлено применительно к версии 4.5.30 программы, хотя может использоваться и для других версий.
Примечание
Данное описание полностью применимо только в тех случаях, когда программа запущена с терминала. Когда работа производится через эмулятор терминала в графическом режиме, некоторые положения описания могут не соответствовать реакции программы, по-видимому, потому, что нажатия на клавиши вначале перехватываются графической оболочкой. Наиболее часто такое несоответствие будет встречаться там, где речь идет о "горячих" клавишах.
В большинстве дистрибутивов программа Midnight Commander не устанавливается автоматически при инсталляции системы. Но соответствующий rpm-пакет, как правило, имеется на дистрибутивном диске, и установка Midnight Commander из rpm-пакета проходит без каких-либо сложностей (о том, как произвести установку ПО из rpm-пакета, см. в разд. 10.2). А, поскольку наличие этой программы существенно облегчит Вашу дальнейшую жизнь, я настоятельно рекомендую вам установить ее сразу же, как только вы произвели установку ОС.
6.2. Внешний вид экрана Midnight Commander
Для того, чтобы запустить Midnight Commander, надо набрать в командной строке оболочки mc и нажать ‹Enter›. Если программа не запустилась, надо найти, где расположен исполняемый файл с именем mc, воспользовавшись командой find / name mc, после чего указать в командной строке полный путь, например, у меня это /usr/bin/mc. После запуска вы увидите голубой экран, очень напоминающий экран программы Norton Commander для MS-DOS или программы FAR Е. Рошаля, которая широко используется в DOS-окне под Windows.
Рис. 6.1. Внешний вид экрана при работе с Midnight Commander
Почти все пространство экрана при работе с Midnight Commander занято двумя "панелями", отображающими списки файлов двух каталогов. Над панелями расположена строка меню, причем к выбору команд в этом меню можно переключиться по клавише ‹F9› или с помощью мыши (если сразу после запуска mc вы не видите строки меню, не огорчайтесь - видна или нет строка меню, определяется настройками программы).
- Серверные технологии хранения данных в среде Windows® 2000 Windows® Server 2003 - Наик Дайлип - Программное обеспечение
- Призрак в Сети. Мемуары величайшего хакера - Уильям Саймон - Программное обеспечение
- Photoshop CS2 и цифровая фотография (Самоучитель). Главы 10-14 - Солоницын Юрий - Программное обеспечение