Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
27.03.2016
Размер:
341.5 Кб
Скачать

17.3 Змінні інтерпретатора b-shell

2.1 Процедури інтерпритатора shell

Shell – файл має одну або кілька команд shell, які потрібно виконувати одна за другою, коли ім’я файлу використовується як ім’я команди. Присутність такого файла дозволяє створювати свої власні команди.

Наприклад:

Нехай є алгоритм, який підраховує кількість символів у файлі з поточного каталога:

$ ed counter

? counter

a

ls : wc -c [текст команди]

.

10

q

$_

$ sh counter [виклик команди]

20

$_

Використовувати цю команду одразу не можна. Потрібно за допомогою chmod змінити спосіб виконання файла:

$ chmod -c u+x counter [створення файлу, що виконується]

$_

після цього файл запускається з командного рядка без sh. Після цього файл команди переміщують у власний каталог bin та додають $ HOME/bin до PATH. Це дозволяє виконувати команду де завгодно (або /usr/john/newcomd/counter/ або $ HOME/bin/counter).

ДОПОМІЖНІ КОМАНДИ ECHO.

  1. $ echo This isa massage

This is a massage

$_

2) $ echo -n This is a massage

This is a massage

$_

3)$ cat getkey

echo -n ‘Please press any key, then <or> to continue:’

read inkey

$_

$ chmod -c u+ x getkey

$_

$ getkey

Please press any key, then <or> to continue:

Перед передачею аргументів команді, що викликана shell завжди присвоює їх значення позиційним параметрам. Наприклад: нехай файл bounce, що має echo $1 $2 $3 $4 $5 $6

Якщо викликати файл з шістьма аргументами

$ bounce one two three four five six

one two three four five six

$_

17.3.2 Вкладені цикли

$ cat loop

out =1

in=3

while out = expr $out -1 зовнішній цикл

do echo out loop $ out внутрішній цикл

until in = expr $ in -1

do echo in loop $in

done

done якщо вивести на екран файл loop

$ loop

out loop 0

in loop 2

in loop 1

$_

Цикл while та until можливо передавати за допомогою команди break. Щоб вийти за межі більш одного циклу, необхідно визначити потрібну кількість рівнів циклу.

$ cat multiloop $multiloop

while true LOOP1

do echo LOOP1 LOOP2

until false ц.1 LOOP3

do echo LOOP2 LOOP2

while true ц.2 LOOP3

do echo LOOP3 LOOP2

break ц.3 LOOP3

done LOOP2

done LOOP3

done ……….

При відсутності break внутрішній цикл (3) повинен виконуватись нескінченно. Break приводить до повернення у середній цикл (2), тому цикл (2) та (3) чергуються.

Синтаксис процедур мови shell потребує щоб кожній команді циклу while, for або until відповідав оператор done, який завершує цикл. Циклічна програма, приведена вище, буде виконувати почерзі цикл (2) та цикл (3). Якщо замінити команду break, то це змусить програму повертатись до зовнішнього циклу 1 та по черзі виводити LOOP1, LOOP2, LOOP3.

17.3.3 Підстановка результатів виконання команд. Shell встановлює результати виконання команди, що викликана як значення змінної. Для цього беруть у знаки наголосу “ ’ ”:

$ fnames=’1s’

$_

Припустимо, що у поточному каталозі маємо file_1, file_2, file_3, file_4 тоді:

$ echo $fnames

file_1 file_2 file_3 file_4

$_

Підстановку результатів можна використовувати тільки з командами, які мають стандартний вивід

$ val=’1pr file1’

$_ не рекомендується

Вихідна інформація 1pr file1 нажсилається на друк, а змінній va1 присвоюється пусте значення.

$ current = ‘pwd’

$ cd/user/denis/plan/goal

$ :::::

$ cd $current

Змінна current використовується для зберігання складного імені поточного каталогу, поки в ньому виконується деяка задача. Останній оператор дозволяє повернутись до первичного каталогу.

Але

if test “$y”= “$x”

then echo ‘they are the same’

else echo ‘they are different’

fi

Буде визначена невірність х та у.

Якщо test ’$y’=’$x’, то будуть порівняні змінні х та у, а $ втратить зміст.

У shell примітивні not, and та or можуть бути об’єднані для отримання більш гнучких керуючих конструкцій.

! – одномісна операція not, інвертує значення виразу;

-о – двомісна операція or, дає значення true, якщо обидва операнди мають значення true;

а – двомісна операція and, дає значення true, якщо обидва операнди мають значення true

Наприклад:

  1. if test ! true ? if test false

якщо

if test “$2” -- true то $2 не існує

if test ! “$2”

2) if test –f $1 -a -r $1 -o -w $1

then echo “file $1 is accessible”

elif test –d $1

then echo “$1 is a directory”

else echo “file $1 is not accessible”

fi

Повідомлення file $1 is accessible виводиться тільки у тому випадку, якщо файл аргумента ($1) є звичайним файлом, для якого можливі і читання і запис. Вираз test –d $1 ,elt true, якщо файл аргумента є каталогом.

Соседние файлы в папке Додаткова інформація