
- •1. Екскурс до історичного розвитку os Unix
- •1.1 Виникнення os Unix
- •Сучасний стан os Unix
- •2. Unix на платформі Intel
- •3.1 Спільні принципи інсталяції
- •4. Введення в архітектуру ядра os Linux.
- •5. Основні поняття
- •5.1 Початок роботи
- •5.2 Вхід до системи
- •5.3 Ввод команд
- •5.4 Ввод командного рядка
- •5.5 Команди редагуванняя командного рядка
- •5.6 Керування процесом
- •5.7 Отримання списку процесів, що виконуються ps
- •5.8 Знищення процесу Del, Kill
- •5.9 Призупинка вводу на екран Ctrl-s
- •5.10 Використання калькуляторів
- •6. Початкове завантаження os Unix
- •Особливості завантаження os Unix
- •Інсталяція ядра
- •Допоміжні засоби для визначення os Unix
- •9. Файлова система Unix
- •9.1 Будова файлової системи Unix
- •9.2 Робота з файлами
- •9.3 Генерація імен файлів за допомогою метасимволів
- •10. Робота з каталогами
- •10.1 Права доступа до файлів та каталогів Для визначення прав доступу, зв’язаних з конкретним файлом або каталогом використовується команда ls –l:
- •Інші дев’ять символів додають три набори по три символи: перший – для індивідуального користувача;
- •10.2 Побудова командного рядка
- •10.3 Переадресація вводу та виводу
- •11. Конвeйори
- •12. Використання друкуючих пристроїв
- •13. Зв’язок з системою unix
- •14. Команда calendar
- •15. Спілкування з користувачем ззовні системи Unix
- •16. Процесори інтерпритаторa b-shell
- •16.1 Зарезервовані змінні
- •17. Керуючі структури у мові b-shell
- •17.1 Завдання директив інтерпретатору shell. Групування
- •17.2 Умовне виконання
- •17.3 Змінні інтерпретатора b-shell
- •2.1 Процедури інтерпритатора shell
- •17.3.2 Вкладені цикли
- •17.4 Керування перериваннями
- •17.5 Преревірка файлів, числових значень та ланцюжків символів
- •17.6 Зарезервовані змінні
17.4 Керування перериваннями
Сигнали переривань виникають у випадках різних ненормальних ситуацій. Інтерпритатор shell керує більшістю цих сигналів і ряд з них він передає shell- процедурі, яка є активною у момент виникнення переривання. До таких сигналів відносяться наступні:
сигнал 1, який виникає при відключенні термвналу;
сигнал 2, який виникає при натисненні DEL;
сигнал 8, який генерується командою kill –9 ноиер процесу;
сигнал 15, який генерується командою kill без опцій.
Shell – процедура може вибирати, перехоплювати або ігнорувати кожний з цих сигналів (за виключенням сигналу 9). Якщо програма не перехоплює сигнали переривань при їх появі, інтерпритатор shell буде завершувати викликану в даний момент shell- процедуру. У ряді випадків це може приводити до втрати деяких тимчасових файлів, створених даною shell-процедурою. Щоб уникнути цього використовують команду trap (пастка) для перехопленнясигналів переривань.
Trap ‘<список команд>’ <сигнали>
Список команд повинен бути заключений у лапки. Якщо у список входить не одна команда, то кожна команда повинна бути відділена одна від одної крапкою з комою. У команді trap може бути визначено декілька сигналів, тому вони повинні бути розділені пропусками.
if test $# -eq 2
then echo PROCESSING
elif test $# -lt 2
then echo ‘missing second filensme’
else echo ‘too many arguments’
fi
test $# -eg 2 буде true тільки у тому випадку, якщо shell передає програмі тільки 2 аргументи.
Test $# -et 2 буде true, якщо число аргументів менше 2.
За допомогою test можна перевіряти ланцюжки символів
test –n < string > [існує ланцюжок символів]
test –z < string > [відсутній ланцюжок символів]
test < string 1 > = < string 2 > [тотожність 2 ланцюжків символів]
test < string 1 > !=< string 2 > [нетотожність 2 ланцюжків символів]
наприклад:
if test -n “$2”
then echo PROCESSING
else echo ‘missing second filename’
fi
Y= ‘abcd’
X=abcd
if test $Y=$X
then echo ‘they are the same’
else echo ‘they are different’
fi
У даному випадку пропуски у ланцюжок не виключаються. Тому програма визначить х=у.
for eachone in * [перевірка імен файлів у поточному каталозі]
do if test -f $eachone [запит “це файл ?”]
then if test -r $ eachone [якщо так, то він доступний до читання]
then cp $eachone $HOME/$1 [якщо так, копіювання файла до каталога $HOME/$1]
else num = ’expr $num +1’ [у протилежному випадку збільшити на 1 загальне число]
fi [недоступних для читання файлів у поточному каталозі]
fi
done
echo “$ num non-accessibles files”
За допомогою команди copyall копіюють поточний доступний файл, який не є каталогом, з поточного каталога у каталог, що визначається у начальному каталозі.
$ copyall newdir
Ця команда буде копіювати кожний доступний для читання файл у поточному каталозі у початковий каталог, у підкаталог newdir. Якщо newdir не існує, його буде створено. Якщо ж він існує перевіряється кожний файл з поточного каталога: спочатку чи звичайний це файл, а потім чи доступний він для читання. Якщо виконуються обидві умови, файл буде скопійовано у каталог newdir; якщо він не доступний длячитання, програма додасть 1 до загальної кількості таких файлів (змінна num). Після закінчення копіювання всіх файлів програма виведе на екран кількість недоступних для читання файлів.
Для перевірки співвідношення між двома числовими значеннями test використовує операції співвідношення:
- eq [A=B ?]
- ne [A не =B ?]
- ge [A>=B ?]
test A –le B [A<B ?]
- gt [A>B ?]
- lt [A<B ?]
У кожному випадку команда test перевіряє, чи має співвідношення значення true. Якщо співвідношення true, повертається 0, інакше не 0.
$ cat bigfiles
count=10000
for i in *
do size = ‘wc –c <$i’
if test $size –ge $ count
then echo “$i size: $size”
if
done
$_
Програма превіряє розмір усіх файлів у поточному каталозі, а потім виводить імена всіх файлів, які мають хоч 10000 символів. Вираз size = ‘wc -c <$i’ є підстановкою результата виконання команди , яка підраховує число символів у файлі, ім’я котрого в цей час присвоєно змінній і. Потім значення змінної size порівнюється зі значенням змінної count. Вираз test $size -ge $count буде true тільки тоді, коли $size більше або дорівнює 10000. У цьому випадку на екран виводиться ім’я файлу та його розмір. У деяких випадках програма перед обробкою може перевіряти аргументи.
За допомогою elif
$ cat newfile
if expr “$1” : ”Mark” > /dev/null
then echo Matching word is Mark
elif expr “$1” : “John” > /dev/null
then echo Matching word is John
elif expr “$1” : “Dennis” > /dev/null
then echo Matching word is Dennis
else echo *** No match ***
fi
$_
Для розгалудження по багатьом напрямкам використовують case
case < string > in
s1) < список команд>;;
s2) < список команд >;;
:::::::::::::::::::::::::::
sn) < список команд >;;
esac
Команда caseзрівнює шаблон string з кожним s1, s2, ….., sn, якщо фіксується збіг, буде виконуватись список команд, який йде за шаблоном і збігається зі string
Echo –n ‘please, enter your selection (from a to d) : ’
Read entry
Case $ entry in
A|a) echo ‘You have an apple.’;;
B|b) echo ‘Where’s the beef ? ’ ;;
C|c) echo ‘Coke adds life.’ ;;
D|d) echo ‘A grop in the bucket.’ ;;
*) echo ‘Please, type A, B, C, or D.’;;
easc