Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционная система UNIX.doc
Скачиваний:
94
Добавлен:
01.05.2014
Размер:
1.67 Mб
Скачать

8.4.5. Использование команды nohup

Все процессы, за исключением at и batch, завершаются, когда вы выходите из системы. Если вы хотите, чтобы после вашего выхода из системы процесс в фоновом режиме продолжал выполняться, то вам необходимо использовать команду nohup. Команда nohup имеет следующий формат:

nohup command &<CR>

Предположим, вы хотите, чтобы команда grep осуществила поиск во всех файлах в вашем текущем справочнике строки "word" и перенаправила вывод в файл word.list, и затем, не ожидая завершения, вы хотите выйти из системы, то введите следующую строку:

nohup grep word * > word.list & <CR>

Вы можете завершить команду nohup с помощью команды kill.

9. Средства программирования shell

Вы можете использовать shell для создания программ. Такие программы называются также процедурами shell. В этом разделе рассказывается как создавать и выполнять программы shell с помощью команд, переменных, позиционных параметров, кодов возврата.

Прежде чем создавать программы shell необходимо изучить редактор.

9.1. Программы shell

9.1.1. Создание простых программ shell

Начнем описание создания простых программ shell, которые выполняют задачи:

  • печать текущего справочника;

  • список содержимого этого справочника;

  • отображение следующих сообщений на вашем терминале:

"This is the end of the shell program."

С помощью редактора создайте файл dl и введите в него строки:

pwd<CR>

ls<CR>

echo This is the end of the shell program.<CR>

Теперь вы имеете программу shell. Вы можете с помощью cat отобразить содержимое файла:

$ cat dl<CR>

pwd

ls

echo This is the end of the shell program.

$

9.1.2. Выполнение программ shell

Выполнить shell программу вы можете с помощью команды sh. Введите:

sh dl<CR>

Когда команда dl выполняется с помощью sh, то вначале печатается имя пути текущего справочника, потом список файлов в текущем справочнике и в конце комментарий: "This is the end of the shell program."

С помощью команды chmod вы можете сделать файл исполняемым:

$ chmod u+x dl<CR>

$ ls -l<CR>

total 2

-xw------ 1 login login 3661 Nov 2 10:28 mbox

-xwx----- 1 login login 48 Nov 15 10:50 dl

$

Обратите внимание, что chmod включает разрешение на выполнение (+x) для пользователя (u). Теперь dl является исполняемой программой. Попытайтесь выполнить ее. Введите:

dl<CR>

9.1.3. Создание справочника bin для исполняемых файлов

Чтобы сделать shell программы доступными изо всех ваших справочников, вы можете создать справочник bin в своем регистрационном справочнике и переписать shell программы в этот справочник.

С помощью переменной PATH вы можете включить ваш справочник bin:

PATH = $PATH:$HOME/bin

9.1.4. Ограничения при именовании программ shell

shell программе вы можете дать любое имя, не совпадающее с именами системных команд. Если имя вашей программы совпадает с именем команды системы, то система будет выполнять вашу команду вместо системной.

9.2. Переменные

shell программы манипулируют с переменными. В этом пункте обсуждаются три типа переменных:

  • позиционные параметры;

  • специальные параметры;

  • именованные переменные.

9.2.1. Позиционные параметры

Позиционные параметры являются переменными в shell программе. Их значение устанавливается из аргументов, указанных в командной строке, которая вызывает программу. Позиционные параметры нумеруются и на них ссылка идет с помощью символа $: $1, $2, $3 и т.д.

shell программа может использовать до 9 позиционных параметров. Если shell программа вызывается с помощью командной строки, подобной следующей:

shell.prog pp1 pp2 pp3 pp4 pp5 pp6 pp7 pp8 pp9 <CR>

то позиционному параметру $1 в программе присваивается значение pp1, $2 - значение pp2 и т.д. во время вызова программы. Чтобы практически рассмотреть это замещение позиционных параметров, создайте файл pp. Затем введите команды echo в файл pp. В результате выполнения команды cat получим следующий вывод:

$ cat pp<CR>

echo The first positional parameter is: $1<CR>

echo The second positional parameter is: $2<CR>

echo The third positional parameter is: $3<CR>

echo The fourth positional parameter is: $4<CR>

$

Если вы выполните эту shell программу с аргументами one, two, three, four, то получите результат (но вначале нужно сделать shell программу pp исполняемой с помощью команды chmod):

$ chmod u+x pp<CR>

$

$ pp one two three four<CR>

echo The first positional parameter is: one

echo The second positional parameter is: two

echo The third positional parameter is: three

echo The fourth positional parameter is: four

$

Команда who перечисляет всех пользователей, в данный момент зарегистрированных в системе. Можем создать простую программу whoson, которая будет сообщать, работает ли в настоящий момент конкретный пользователь. Введем в файл whoson командную строку:

who | grep $1<CR>

Команда who перечисляет всех текущих пользователей системы, а команда grep осуществляет поиск строки, содержащей значение, соответствующее позиционному параметру $1. Теперь подставим конкретное имя в качестве аргумента в файле whoson, например, sue. Когда вы зададите команду "whoson sue", shell программа заменит $1 на sue в вашей программе и выполнит ее в следующем виде:

who | grep sue<CR>

Вывод будет следующим:

$ whoson sue<CR>

sue tty26 Jan 24 13:35

$

Если указанный пользователь sue не зарегистрирован в данный момент в системе, grep завершится неудачно и whoson не будет ничего выводить на экран.

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

Соседние файлы в предмете Операционные системы