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

17.5 Преревірка файлів, числових значень та ланцюжків символів

За допомогою команди test разом з командою while, if та until виконують перевірку файлів:

- r файл існує і його можна прочитати

-w файл існує і в нього можна записувати

test –f <filename> файл існує і не є каталогом

-d файл існує і є каталогом

-s розмір файла відрізняється від 0

test true false

$ cat copyall

num =0 [лічильник файлів, що не можуть читатися]

if test –d $HOME/$1 [перевірка на існування дом. каталогу]

then :

else mkdir $HOME/$1 [якщо каталог не існує, його потрібно створити в початковому каталозі]

fi

$ kill -9 283 ця команда не може бути перехоплена або ігнорована вказаним у команді процесом

$_

$ kill –9 – самовивід з системи, якщо статус не привелейований, то припиняється процес свого терміналу.

$_

  • Синтаксичні помилки будуть фіксуватися завжди, коли пропущений або недоступний оператор або операнд.

  • Якщо намагаються застосовувати арифметичну операцію до символу або ланцюжку символів

17.5.1Умовна заміна змінних. Значення змінної можна використати у виразі або замінити його на інший. Ця процедура має назву умовної заміни змінної. SHELL реалізує 4 варіанти умовної заміни за допомогою {-,+,?,=}

$ {VARIABLE-OTHER}

Якщо VARIABLE було присвоєно значення, використовується це значення ; в протилежному випадку використовують ланцюжок символів OTHER, а VARIABLE залишається без змін

$ echo $ {VAL -123}перевіряє чи встановлено VAL

123 так як VAL не встановлено, то ланцюжок має 123 символи

$SUB=456

$ echo ${VAL-$ SUB}

456

$ { VARIABLE =OTHER}

Якщо VARIABLE було присвоєно значення, воно використовується, в протилежному випадку перед використанням змінної VARIABLE присвоюється значення OTHER

$ echo ${VAL=xyz}

xyz

$ echo $ VAL

xyz

$ {VARIABLE ? EMPTY}

Якщо VARIABLE присвоєно значення, використовується це значення, в протилежному випадку на екран виводиться повідомлення, що значення VAL не присвоєно VARIABLE ? EMPTY, а процедура припиняється.

$ error=’variable unset, procedure is aborted’

$ echo $ {VAR ? $ error}

VAR : variable unset, procedure is aborted

$_

$ echo $ {VAR ?}

VAR : parameter not set

$ {VARIABLE + OTHER}

Якщо змінній присвоєно значення, використовується значення змінної OTHER. Якщо ж значення змінної VARIABLE не присвоєно за її значення використовується пустий ланцюжок символів, при цьому VARIABLE значення не присвоюються.

17.5.2 Позиційні параметри. Для ідентифікації позицій елементів або аргументів у командному рядку shell встановлює позиційні параметри. Shell ідентифікує елементи командного рядка за допомогою номерів починаючи з 0. Перший елемент завжди позначається як ;0 – ім’я процедури

$0 $1 $2…$9

$ diff file1 file2 …file9

Команда SET.

Присвоює значення позиційним параметрам.

$ set arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9

$ echo $1 $2 $3 $4 $5 $6 $7 $8 $9

arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9

$_

Якщо вказати команду:

$ set ‘date’

$_

Вихід команди date буде передавати свої значення як аргументи.

$ date

Wed Feb 15 21:49:20 1984

$_

(Wed Feb 15 21:49:20 1984)

$1 $2 $3 $4 $5

$ echo $4

21:49:20

$_

$ echo ‘DATE : $1 $2 $3 $5 TIME : $4’

DATE : Wed Feb 15 1984 TIME : 21:49:20

$_

Щоб використати позиційний параметр з номером більшим за $9 використовують коанду shift, яка зсовує аргументи на одну позицію вліво

$4 > $3, $3 > $2, $2 > $1, а $1 зникає.

$ echo $1 $2 $3 $4 $5 $6 $7 $8 $9

arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9

$ shift

$ echo $1 $2 $3 $4 $5 $6 $7 $8 $9

arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9

За допомогою * можна генерувати номер будь-якого позиційного параметра.

$ echo $*

arg2…arg11

$ cat main

if subpro

then echo ‘Exit status is zero’

else echo ‘Exit status is non-zero’

fi

$ cat subpro

HERE = ‘pwd’

Status = 0

:::

exit $status

$_

Subpro передає змінній status значення 0, яке приводить до виводу повідомлення Exit status is zero

Цикл for організує умовний цикл

For variable in list

do [ виконання команди від do до done]

done

Команда for використовує слово з list як нове значення змінної variable, а потім перевіряє це нове значення. Якщо variable має припустиме значення, то команди між do та done виконуються, якщо список закінчується, виконується наступна за done команда.

$ cat example

list =’word1 word2 word3 word4’

for VAL in $list

do echo $VAL

done

echo ‘END OF LIST’

LIST

$_

  1. $ cat rebounce

one two three

for VAL

do echo $VAL

done

$_

VAL приймає значення аргументів процедури, які передаються інтерпритатору shell.

Shell має комбінацію операторів else та if, що дозволяє писати більш короткі програми.

$ cat checkname

if expr “$1” : “Mark” > /dev/null

then echo Matching word is Mark

else if expr “$1” : “John” > /dev/null

then echo Matching word is John

else if expr “$1” : “Dennis” > /dev/null

then echo Matching word is Dennis

else echo *** No match ***

fi

fi

fi

$_

$ cat multiloop $ multiloop

while true LOOP1

do echo LOOP1 LOOP2

until false ц.1 LOOP3

do echo LOOP2 LOOP1

while true ц.2 LOOP2

do echo LOOP3 LOOP3

break цю3 LOOP1

done LOOP2

done LOOP3

done ………….

якщо поставити break 3, то це призведе до виходу за межі всіх трьох циклів та завершення програми.

$ cat multiloop $multiloop

while true LOOP1

do echo LOOP1 LOOP2

until false ц.1 LOOP3

do echo LOOP2 $_

while true ц.2

do echo LOOP3

break ц.3

done

done

done

За допомогою команди continue можна продовжити виконання програми з оператором for або while, який знаходиться ближче до команди. Якщо у continue задати кількість рівнів, то програма почне виконання з вказаного рівня.

While true

Do command list3

Until false

Do command list2

While true

Do command list1

Continue $level

Done

done

done

Якщо level має значення 2, то виконання почнеться з until, якщо 3 – то з циклу while, якщо level не встановлено (або 1), то програма буде виконуватись у самому внутрішньому циклі while. Break та continue виводять програму з поточного циклу.

За допомогою exit виконує зупинку всієї процедури. При цьому у програму, що її викликає передається код 0 (false).

Якщо намагатися дописати додаткові символи у кінець імені змінної

$ far=tele

$ TV=farvision

$ echo $TV

$_

У цьому випадку shell присвоює змінній TV значення порожнього рядка, тому що не зможе знайти змінну з ім’ям farvision. Для цього треба виконати:

$ TV={$far} vision

$ echo $TV

television

$_

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