Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Программирование на shell. Использование командных файлов

Поиск

Процедура языка shell. Shell – одна из многих команд Unix. Процедура языка Shell – это командный файл. Для выполнения команд необходимо текстовый файл сделать исполнимым (с помощью команды chmod).

Запуск осуществляется следующим образом:

sh имя_исполняемого_файла

Структура команд. Команды в Shell имеют следующий формат:

<имя команды><флаги><аргументы>

В таблице 3 представлены некоторые средства группировки команд, которые могут быть использованы при создании командных файлов на shell.

Таблица 3. Средства группировки команд

Средства группировки Пояснение
; определяет последовательное выполнение команд
& определяет асинхронное (фоновое) выполнение команд
&& определяет выполнение последующей команды при нормальном завершении предыдущей
|| определяет выполнение последующей команды при ненормальном завершении предыдущей

 

Например,

k1&&k2; k3

· k2 будет выполнена при успешном выполнении k1; k3 будет выполнена после любого из исходов обработки k2;

· k1&&{k2;k3} - k2, k3 будут выполнены при успешном выполнении k1;

· {k1;k2}& - в фоновом режиме будет выполняться последовательность команд k1, k2.

Перенаправление данных. Символы >, >> обозначают перенаправление ввода/вывода. Например:

· ls>file1 - команда ls сформирует список файлов текущего каталога и поместит его в файл file1;

· wc –l < file1 - команда wc подсчитает число строк файла file1 и выдаст эту информацию на экран;

· wc –l < file1>file2 - команда wc подсчитает число строк файла file1 и выдаст эту информацию в файл file2

Shell-переменные. Определение переменной содержит имя и значение

var = value

Доступ к переменной осуществляется по имени (со знаком $ перед именем):

· fruit = apple (определение)

· echo $ fruit (доступ)

· apple (результат)

Возможна конкатенация строк:

· fruit = apple

· fruit = pine$ fruit

· echo $ fruit

· pineapple

Переменная может быть:

· частью полного имени файла, например

d = /usrу/bin;

· частью команды, например,

s = “sort +b filename” - наличие пробелов требует кавычек.

Предопределенные переменные языка Shell. В таблице 4 представлены наиболее употребительные переменные.

Таблица 4. Наиболее употребительные переменные

Название Пояснение
HOME домашний каталог пользователя
PATH множество каталогов, в которых ОС ищет команды
PS1 первичная подсказка

 

 

Изменение значения переменной PS1 осуществляется в login-файле.

Изменение значения переменной PATH:

· echo path – посмотреть;

·:/bin:/usr/bin – значение path;

· cd – домой;

· mkdir bin – новый каталог;

· echo $home – посмотреть;

· /users/maryann – текущий каталог;

· $path =:$home/bin:$path – изменение path;

· echo path – посмотреть;

·:/users/maryann/bin:/bin:/usr/bin – новое значение path.

Установка переменной Shell выводом из команды.

Примеры:

· now =’data’

echo $now

Sun Mart 21 12:00:01 PM 2001;

· menu =’cat file’

echo $menu

Text

Для обеспечения видимости переменной используется команда export.

· a = b; export a

echo $a

· d = /home/sv; export d

echo $d

· c = ‘pwd’; export c

echo $c

Структурные операторы shell. Оператор цикла FOR. Синтаксис:

for <переменная> in <список значений>

do <список команд>

done

Например, пусть имеется командный файл makelist:

Cat makelist

sort +1 people | pr –h Distribution | lpr - Сортировка по второму полю, печать заголовка, распечатка файла.

Если вместо одного файла people имеется несколько adminpeople, hardpeople, softpeople, то необходимо повторить выполнение процедуры с различными файлами с помощью оператора for:

· for file in adminpeople, hardpeople, softpeople

do sort +1 $file | pr –h Distribution | lpr

Done

· for file in *people

do sort $file

done

Условный оператор IF. Синтаксис:

if <если эта команда выполняется успешно, то>

then <выполнить все последующие команды до else или, если его нет, до fi>

[else <иначе выполнить следующие команды до fi>]

fi

Например:

if test $# -eg 0

then echo “You must give a filename”

exit 1

else sort +1 $1| …| lpr

fi

Если значение переменной # равно нулю, выводится сообщение "You must give a filename”, выполнение программы прекращается. Иначе выполняется команда сортировки данных.

Команда TEST. Эта команда применяется внутри shell-процедур. Имеется три типа проверок: оценка числовых значений; оценка типа файла; оценка строк.

Для чисел синтаксис следующий:

N op M, где N, M – числовые переменные, операция «op» принимает следующие значения:

· -eg – равно;

· -en – не равно;

· -gt – больше;

· -lt – меньше;

· -ge – больше или равно;

· -le – меньше или равно.

Для файла синтаксис такой:

op filename - операция op принимает следующие значения:

· -s - файл существует и не пуст;

· -f - файл, а не каталог;

· -d - файл-директория;

· -w - файл для записи;

· -r - файл для чтения;

Для строк синтаксис такой:

S op R - операция op принимает следующие значения:

· = - эквивалентность;

·!= - неэквивалентность;

· -z – строка нулевой длины;

· -n – нулевая длина строки.

 

Несколько проверок могут быть объединены логическими операциями –a (and) и -o (or):

· if test –w $2 -a -r $1

then cat $1>> $2

else echo “can not append”

fi;

· echo “Vvedite a”

read a

echo “Vvedite b”

read b

if test $a –lt $b

then

echo “Hello”

else

echo “…”

fi.

Оператор цикла WHILE. Синтаксис:

while <команда>

do <команда>

Done

· n=0

while test $n -lt 5

do

cat myfile1|lpr

n=`expr$n+1`

done;

· while test $# -gt 0

do

if test –s $1

then echo “no file $1”> $2

else sort +1 $1 …

fi

do.

Оператор цикла UNTIL. Этот оператор инвертирует условие повторения по сравнению с оператором

While

until <команда>

do <команды>

Done

Пока “команда” не выполнится успешно, выполнять “команды”, завершаемые ключевым словом done:

· if test $# -eg 0

then echo “Usage …”>$2

exit

fi

until test $# -eg 0

do

if test –s $1

then echo “no file $1”>$2

else sort …

fi

shift

done.

Оператор выбора CASE. Синтаксис:

case <string> in

string1) <если string = string1, то выполнить все следующие команды до;;>;;

string2) <если string = string2, то выполнить все следующие команды до;;>;; string3) и т.д.

Esac.

· together = no

case $1 in

-t) together = yes

shift;;

-?) echo “$0: no option $1”

exit;;

esac

if test $ together = yes

then sort …

fi

· while true

do

echo”Check menu your computer”

1) Disk space

2) Mounted file systems

3) System name

4) Who is logged in

5) Exit

echo “What do you want?”

read number

case $number in

1) df

;;

2) mount –t msdos dev/fd0 /mnt/floppy

;;

3) uname

;;

4) who

;;

5)break

;;

*) echo “you must enter a number (1 throught 5)”

continue

;;

esac

done

exit 0

На экране появляется меню. При выборе определенного пункта меню выполняется соответствующая команда.

Отладка процедур языка shell.

1. Имеются три средства, позволяющие вести отладку процедур.

2. Размещение в теле процедуры команды echo для выдачи сообщений, являющихся трасой выполнения процедуры.

3. Опция –v (verbose – многословный) в команде Shell приводит к печати команды на экран перед ее выполнением.

4. Опция –x (execute) в команде Shell приводит к печати команды на экране по мере ее выполнения с заменой всех переменных их значениями.

Группирование команд

Группы команд или сложные команды могут формироваться с помощью специальных символов (метасимволов):

· & - процесс выполняется в фоновом режиме, не дожидаясь окончания предыдущих процессов;

·? - шаблон, распространяется только на один символ;

· * - шаблон, распространяется на все оставшиеся символы;

· | - программный канал - стандартный вывод одного процесса является стандартным вводом другого;

· > - переадресация вывода в файл;

· < - переадресация ввода из файла;

·; - если в списке команд команды отделяются друг от друга точкой с запятой, то они выполняются друг за другом;

· && - эта конструкция между командами означает, что последующая команда выполняется только при нормальном завершении предыдущей команды (код возврата 0);

· || - последующая команда выполняется только, если не выполнилась предыдущая команда (код возврата 1);

· () - группирование команд в скобки;

· { } - группирование команд с объединенным выводом;

· [] - указание диапазона или явное перечисление (без запятых);

· >> - добавление содержимого файла в конец другого файла.

Примеры

· who | wc - подсчет количества работающих пользователей командой wс (word count - счет слов);

· cat text.1 > text.2 - содержимое файла text.1 пересылается в файл text.2;

· mail student < file.txt - электронная почта передает файл file.txt всем пользователям, перечисленным в командной строке;

· cat text.1,text.2 - просматриваются файлы text.1 и text.2;

· cat text.1 >> text.2 - добавление файла text.1 в конец файла text.2;

· cc primer.c & - трансляция СИ - программы в фоновом режиме. Имя выполняемой программы по умолчанию a.out;

· cc -o primer.o primer.c - трансляция СИ-программы с образованием файла выполняемой программы с именем primer.o;

· rm text.* - удаление всех файлов с именем text;

· {cat text.1; cat text.2} | lpr - пpосмотp файлов text.1 и text.2 и вывод их на печать;

· ps [al] [number] - команда для вывода информации о процессах:

· -a - вывод информации обо всех активных процессах, запущенных с вашего терминала (рис.5);

· -l - полная информация о процессах;

· number - номер процесса.

Рис.5 Вывод полной информации о процессах

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

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

1 S 200 210 7 0 2 20 80 30 703a 03 0:07 cc

1 R 12 419 7 11 5 20 56 20 03 0:12 ps

· F - флаг процесса (1 - в оперативной памяти, 2 - системный процесс, 4 - заблокирован в ОЗУ, 20 - находится под управлением другого процесса, 10 - подвергнут свопингу);

· S - состояние процесса (O - выполняется процессором, S - задержан, R - готов к выполнению, I - создается);

· UID - идентификатор пользователя;

· PID - идентификатор процесса;

· PPID - номер родительского процесса;

· C - степень загруженности процессора;

· PRI - приоритет процесса, вычисляется по значению переменной NICE и чем больше число, тем меньше его приоритет;

· NI - значение переменной NICE для вычисления динамического приоритета, принимает величины от 0 до 39;

· ADDR - адрес процесса в памяти;

· SZ - объем ОЗУ, занимаемый процессом;

· WCHAN - имя события, до которого процесс задержан, для активного процесса - пробел;

· TTY - номер управляющего терминала для процесса;

· TIME - время выполнения процесса;

· CMD - команда, которая породила процесс.

· nice [-приращение приоритета] команда[аргументы] - команда изменения приоритета. Каждое запущенное задание (процесс) имеет номер приоритета в диапазоне от 0 до 39, на основе которого ядро вычисляет фактический приоритет, используемый для планирования процесса. Значение 0 представляет наивысший приоритет, а 39 - самый низший. Увеличение номера приоритета приводит к понижению приоритета, присвоенного процессу. Команда nice -10 ls -l увеличивает номер приоритета, присвоенный процессу ls -l на 10;

· renice 5 1836 - команда устанавливает значение номера приоритета процесса с идентификатором 1836 равным 5. Увеличить приоритет процесса может только администратор системы;

· kill [-sig] <идентификатор процесса> - прекращение процесса до его программного завершения. sig - номер сигнала. Sig = -15 означает программное (нормальное) завершение процесса, номер сигнала = -9 - уничтожение процесса. По умолчанию sig= -9. Вывести себя из системы можно командой kill -9 0. Пользователь с низким приоритетом может прервать процессы, связанные только с его терминалом;

· mc - вызов файлового менеджера (программы - оболочки) Midnight Commander, аналогичного Norton Commander;

· sort [-dr] - сортировка входных файлов и вывод результата на экран.



Поделиться:


Последнее изменение этой страницы: 2016-08-16; просмотров: 467; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.39.11 (0.006 с.)