- •Анотація
- •Лабораторна робота № 1 Перенаправлення уведення-виведення в oc unix. Конвеєри
- •Лабораторна робота № 2 Командна мова ос unix shell
- •Лабораторна робота №3 Процеси в unix
- •Теоретичні відомості:
- •Команди управління процесами
- •Лабораторна робота № 4 Асинхронне видалення дочірніх процесів за допомогою сигналу sigchld. Потоки, що повертають значення
- •Лабораторна робота № 5 Розробка багатофайлових програм Використання утиліти make
- •Лабораторна робота № 6 Взаємодія процесів. Розподілювана пам’ять. Семафори
- •Лабораторна робота № 7 Взаємодія процесів. Програмні канали
- •Лабораторна робота № 8 Розробка графічного інтерфейсу за допомогою бібліотеки Qt3. Створення в kDevelop базової структури додатку
- •Література
Лабораторна робота № 2 Командна мова ос unix shell
Проведення заняття розраховано на 4 години
Мета роботи: Отримати тримати практичні навички навички по програмуванню з використанням можливостей командної мови SHELL
Теоретичні відомості:
Інтерпретатор SHELL
Інтерпретатор SHELL є оболонкою над всією операційною системою і виконує інтерфейсні функції між користувачем і ОС. Він перехоплює і інтерпретує всі команди користувача: формує і виводить у відповідь повідомлення.
Крім запуску на виконання стандартних команд UNIX і виконуваних файлів, інтерпретатор включає власну мову, яка по своїх можливостях наближається до високорівневих мов програмування. Ця мова дозволяє створювати програми (SHELL-файли), які можуть включати оператори мови і команди UNIX. Такі файли не вимагають компіляції і виконуються в режимі інтерпретації, але вони повинні володіти правом на виконання (встановлюється за допомогою команди chmod).
Процедурі SHELL можуть бути передані аргументи при запуску. Кожному з перших дев'яти аргументів ставиться у відповідність позиційний параметр від $1 до $9 ($0 – ім'я самої процедури), і по цих іменах до них можна звертатися із тексту процедури.
Перш, ніж почати розгляд деяких операторів SHELL, .слід звернути увагу на використання в командах деяких символів:
\ знак відміни спеціального символу переведення переведення рядка, наступного безпосередньо услід за цим знаком.
‘ одинарні лапки: використовуються для обрамлення тексту: передаваного як єдиний аргумент команди.
«» подвійні лапки, використовуються для обрамлення тексту, що містить імена змінних для підстановки ($имя) або стандартні команди, поміщені в символи тупого наголосу (`команда`).
`` символи тупого наголосу, служать для виконання команди, поміщеної між ними.
echo виведення повідомлень.
Приклад: Уведення-виведення на екран вмісту поточного каталогу.
Echo «Поточний каталог: \
`pwd` \
`ls`»
Буде виведено:
Поточний каталог: им’я_каталога
файл_1
файл_2
. . . . . .
Змінні мови SHELL
Мова SHELL дозволяє працювати із змінними (без попереднього оголошення). Імена змінних починаються з букви і можуть включати букви і цифри. Звернення до змінних починається з знаку $.
Приклад: Перехід до початкового каталога користувача.
$cd $HOME
Оператор присвоєння
Присвоєння значень змінним здійснюється за допомогою оператора ‘=’ без пропусків.
Приклад. S=Hello
echo $s
Обчислення виразів
Здійснюється за допомогою команди expr і операторів:
арифметичних логічних
+ складання = рівно
- віднімання !- не рівно
\* множення \< менше
/ ділення \<= менше або рівно
% залишок від ділення \> більше
\>= більше або рівно
Результат операцій порівняння - виведення виведення 1 (true) або 0 (false). Всі оператори і імена змінних повинні відокремлюватися відокремлюватися один від одного пропусками.
Приклад:
a=5 b=12
a=’expr $a + 4’
d=’expr $b - $a’
echo $a $b $d
Буде виведено:
9 12 3
Умовні вирази
Розгалуження обчислювального процесу здійснюється за допомогою оператора if:
if список_команд1
then список_команд2
[else список_команд3]
fi
Список_команд - це одна або декілька команд (для задавання задавання пустого пустого списку використовується двокрапка - ‘:’). Список_команд1 передає оператору if код повернення останньої команди з списку. Якщо він рівний 0, то виконуються команди з список_команд2, таким чином нульовий код повернення еквівалентний значенню «істина». Інакше виконуються команди з список_команд3, якщо він існує.
Перевірка умови може здійснюватись за допомогою команди test. Аргументами цієї команди можуть бути імена файлів, числові і нечислові рядки. Вона використовується в слідуючих слідуючих режимах:
· перевірка файлів: test -ключ имя_файла
Ключі: -r файл існує і доступний для читання;
-w файл існує і доступний для запису;
-x файл існує і доступний для виконання;
-f файл існує і має тип ‘-‘, тобто це звичайний файл;
-s файл існує, має тип ‘-‘ і не пустий;
-d файл існує і має тип ‘d‘, тобто це каталог.
· порівняння чисел: test число1 -ключ число2
Ключі: -eq рівне;
-ne не рівно;
-lt менше;
-le менше або рівно;
-gt більше
-ge більше або рівно.
· порівняння рядків:
test [-n] рядок рядок непорожній;
test -z рядок рядок пустий пустий;
test строка1 = строка2 рядки рівні;
test строка1 != строка2 рядки не рівні.
Приклад:
# Оцінка досягнень
echo «Яку оцінку Ви одержали на іспиті?»
read z
if [ $z = 5 ]
then echo Молодець!
elif [ $z = 4 ]
then echo «Все одно молодець!»
elif [ $z = 3 ]
then echo «Все одно!»
elif [ $z = 2 ]
then «Все!»
else echo !
fi
Оператор чисельногочисленного вибору case
Оператор case має слідуючий слідуючий формат:
case рядок in
шаблон) список команд ;;
шаблон) список команд ;;
шаблон) список команд ;;
............
esac
Звичайно останній рядок вибору має шаблон *, що в структурі case означає будь-яке значення. Цей рядок вибирається, якщо не відбувся збіг ні з одним з раніше записаних шаблонів, обмежених дужкою ). Значення є видимими у порядку запису.
Приклад:
# Оцінка досягнень
echo «Яку оцінку Ви одержали на іспиті?»
read z
case $z in
5) echo «Молодець!»;;
4) echo «Все одно молодець!»;;
3) echo «Все одно!»;;
2) echo «Все!»;;
*) echo !
esac
Побудова циклів
У мові SHELL є три типу циклів: while, until і for.
Цикл while
while список_команд1{;| переведенняпереведення рядка}
do список_команд2{;| переведення переведення рядка}
done
У умові враховується код повернення останньої виконаної команди з список_команд1, при цьому 0 інтерпретується як «істина».
Цикл until
until список_команд1{;| переведення переведення рядка}
do список_команд2{;|переведення переведення рядка}
done
Перевірка умови виконується перед виконанням циклу. Враховується код повернення останньої виконаної командиз список_команд1, при цьому цикл виконується до тих пір, поки код повернення не прийме значення «істина».
Цикл for
for змінна [in список_значень]{;| переведення переведення рядка}
do список_команд{;переведення переведення рядка}
done
Змінній присвоюється значення чергового слова з список_значень і для цього значення виконується список_команд. Кількість ітерацій рівна кількості ланцюжків символів в списке_значень, розділених пропусками. Якщо слово in і список_значень опущені як необов'язкові, то змінній по черзі присвоюються значення параметрів, переданих при запуску даної програми. Список можна використовувати як шаблони імен файлів, тоді інтерпретатор перетворює цей шаблон на потрібний синтаксисом список імен файлів, що задовольняє шаблону.
Приклад: Друк списку імен текстових файлів з поточного каталога.
list=`ls *.txt`
for val in $list
do
echo «$val»
done
Завдання 1: Створити командний файл, в якому:
Виводиться на екран ім'я командного файлу;
Виводиться вміст файлу (файл повинен існувати), ім'я якого передається першим параметром командного файлу, його рядки нумеруються, сортуються в зворотному порядку, зберігаються у файлі і відображуються відображуються на екрані;
Створюється з клавіатури і відображується відображується на екрані файл, ім'я якого задається другим параметром командного файлу.
Завдання 2: Створити командний файл, що реалізовує меню з трьох пунктів:
1-й пункт – вивести на екран ім'я користувача і ім'я поточної директорії;
2-й пункт – вивести інформацію про дискову і оперативну пам'ять в даній системі;
3-й пункт – підтвердження.
Завдання 3: Створити командний файл, що видаляє всі файли поточного каталога в диалоговому режимі.
Завдання 4: Створити командний файл, який:
Через вхідні параметри приймає від одного до декількох файлів;
Відображує на екрані їх вміст;
Сортує в зворотному порядку;
Відображує на екрані відсортований файл і зберігає його у файлі з тим же ім'ям, додаючи суфікс _sorted.
