- •1. Введення
- •2. Прості засоби|кошти| shell
- •2.1. Структура команд
- •2.2. Угрупування команд.
- •2.3. Перенаправлення команд
- •2.4. Генерація імен файлів.
- •2.5. Командні файли.
- •3. Середовище|середа| shell (змінні і параметри)
- •3.2. Екранування
- •3.3. Маніпуляції з|із| shell-змінними
- •3.4. Експорт змінних
- •3.5. Параметри
- •3.6. Підстановки shell-інтерпретатора
- •3.7. Програмне середовище
- •4. Програмні структури
- •4.1. Команда test ("[ ]")
- •4.2. Умовний оператор "if"
- •4.3. Оператор виклику ("case")
- •4.4. Оператор циклу з|із| переліком|перерахуванням| ("for")
- •4.5. Оператор циклу з|із| передумовою ("while")
- •4.6. Оператор циклу з|із| постумовою ("until")
- •4.7. Порожній оператор
- •4.8. Функції в shell
- •4.9. Обробка переривань ("trap")
- •5. Розробка графічного інтерфейсу за допомогою бібліотеки Qt3. Створення в kDevelop базової структури додатку
- •5.1. Словник
- •5.2. Створення|створіння| проекту
- •5.3. Робота з Qt Designer
- •5.4. Розробка інтерфейсу програми
- •5.5. Додавання|добавка| виджетов|
- •5.6. Створення|створіння| проміжків між виджетами|
- •5.7. Сигнали і слоти
- •5.8. Написання коду
- •6. Литература
4. Програмні структури
Як у всякій|усякій| мові|язиці| програмування в тексті на мові|язиці| shell можуть бути коментарі. Для цього використовується символ "#". Все, що знаходиться|перебуває| в рядку (у командному файлі) ліво цього символу, сприймається інтерпретатором як коментар. Наприклад
# Це коментар.
## І це.
### І це теж|також|.
Як у всякій|усякій| процедурній мові|язиці| програмування в мові|язиці| shell є оператори. Ряд|лава,низка| операторів дозволяє управляти послідовністю виконання команд. У таких операторах часто необхідна перевірка умови, яка і визначає напрям|направлення| продовження обчислень|підрахунків|.
4.1. Команда test ("[ ]")
Команда test перевіряє виконання деякої умови. З використанням цієї (вбудованої) команди формуються оператори вибору і циклу мови|язика| shell.
Два можливі формати команди:
test умова
або
[ умова ]
ми користуватимемося другим варіантом, тобто замість того, щоб писати перед умовою слово "test", братимемо умову в дужки, що звичніше для програмістів.
Насправді shell розпізнаватиме цю команду по відкриваючій|відчиняючій| дужці "[", як слову(!), відповідному команді "test". Вже цього достатньо|досить|, щоб попередити про поширену помилку початківців: Між дужками і умовою, що міститься|утримується| в них, обов'язково повинні бути пропуски|прогалини|.
Пропуски|прогалини| повинні бути і між значеннями і символом порівняння або операції (як, до речі, і в команді "expr"). Не плутати|путати| з|із| протилежною вимогою для привласнення значень змінним.
У shell використовуються умови різних "типів".
УМОВИ ПЕРЕВІРКИ ФАЙЛІВ:
-f file |
файл "file" є|з'являється,являється| звичайним|звичним| файлом; |
-d file |
файл "file" - каталог; |
-с file |
файл "file" - спеціальний файл; |
-r file |
є|наявний| дозвіл на читання файлу "file"; |
-w file |
є|наявний| дозвіл на запис у файл "file"; |
-s file |
файл "file" не порожньої|пустої|. |
Приклади|зразки|. Вводячи|запроваджуючи| з клавіатури командні рядки в першому випадку одержимо|отримаємо| підтвердження (код завершення "0"), а в другому - спростування (код завершення "1"). "specific" - ім'я існуючого файлу.
[ -f specific ] ; echo $?
0
[ -d specific ] ; echo $?
1
УМОВИ ПЕРЕВІРКИ РЯДКІВ:
str1 = str2 |
рядки "str1" і "str2" співпадають|збігаються|; |
str1 != str2 |
рядки "str1" і "str2" не співпадають|збігаються|; |
-n str1 |
рядок "str1" існує (непорожня|пуста|); |
-z str1 |
рядок "str1" не існує (порожня|пуста|). |
Приклади|зразки|.
x="who is who"; export x; [ "who is who" = "$x" ]; echo $?
0
x=abc ; export x ; [ abc = "$x" ] ; echo $?
0
x=abc ; export x ; [ -n "$x" ] ; echo $?
0
x="" ; export x ; [ -n "$x" ] ; echo $?
1
ВАЖЛИВЕ|поважне| ЗАУВАЖЕННЯ. Команда "test" дає значення "істина" (тобто код завершення "0") і просто якщо в дужках коштує непорожнє|пусте| слово. |
[ privet ] ; echo $?
0
[ ] ; echo $?
1
Крім того, існують два стандартні значення умови, які можуть використовуватися замість умови (для цього не потрібні дужки).
true ; echo $?
0
false ; echo $?
1
УМОВИ ПОРІВНЯННЯ ЦІЛИХ ЧИСЕЛ:
x -eq у|в,біля| |
"x" рівне "y" |
x -ne у|в,біля| |
"x" нерівний "y" |
x -gt у|в,біля| |
"x" більше за "y" |
x -ge у|в,біля| |
"x" більше або рівне "y" |
x -lt у|в,біля| |
"x" менше за "y" |
x -le у|в,біля| |
"x" менше або рівне "y". |
Тобто|цебто| в даному випадку команда "test" сприймає рядки символів як цілі (!) числа. Тому у всій решті випадків "нульовому" значенню відповідає порожній|пустий| рядок. У даному ж випадку, якщо треба обнулити змінну, скажімо, "x", то це досягається привласненням "x=0".
Приклади|зразки|.
x=abc ; export x ; [ abc -eq "$x" ] ; echo $?
"[": integer expression expected before -eq
x=321 ; export x ; [ 321 -eq "$x" ] ; echo $?
0
x=3.21 ; export x ; [ 3.21 -eq "$x" ] ; echo $?
"[": integer expression expected before -eq
x=321 ; export x ; [ 123 -lt "$x" ] ; echo $?
0
СКЛАДНІ УМОВИ:
Реалізуються за допомогою типових логічних операцій:
! |
(not) інвертує значення коду завершення. |
-o |
(or) відповідає логічному "АБО". |
-a |
(and) відповідає логічному "И". |
ПОПЕРЕДЖЕННЯ|попереджувати,запобігання|. Не забувайте про пропуски|прогалини|.
Приклади|зразки|.
[ ! privet ] ; echo $?
1
x=privet; export x; [ "$x" -a -f specific ] ; echo $?
0
x="";export x; [ "$x" -a -f specific ] ; echo $?
1
x="";export x; [ "$x" -a -f specific -o privet ] ; echo $?
0
x="";export x; [ "$x" -a -f specific -o ! privet ] ; echo $?
1
РАДА|порада|. Не зловживати складними умовами. |