- •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. Литература
2.4. Генерація імен файлів.
При генерації імен використовують метасимволи:
* |
довільна (можливо порожня|пуста|) послідовність символів; |
? |
один довільний символ; |
[...] |
будь-який з символів, вказаних в дужках переліком|перерахуванням| і/або з|із| вказівкою діапазону; |
cat f* |
видасть всі файли каталога, що починаються|розпочинаються,зачинаються| з|із| "f"; |
cat *f* |
видасть всі файли, що містять|утримують| "f"; |
cat program.? |
видасть файли даного каталога з|із| однобуквеними розширеннями, скажемо "program.c" і "program.o", але|та| не видасть "program.com"; |
cat [a-d]* |
видасть файли, які починаються|розпочинаються,зачинаються| з|із| "a", "b", "c", "d". Аналогічний ефект дадуть і команди "cat [abcd]*" і "cat [bdac]*". |
Контрольні питання:
Як позначаються стартне введення, стандартне виведення та потік диагностичних повідомлень?
Яка команда називається фільтром? Як позначають перенаправлення введення, виведення?
Що таке конвейєр? Як він позначається?
Як перенаправити повідомлення про помилку з екрану монітора у файл?
2.5. Командні файли.
Для того, щоб текстовий файл можна було використовувати як команду, існує декілька можливостей|спроможностей|.
Хай|нехай| за допомогою редактора створений файл з|із| ім'ям "cmd", що містить|утримує| один рядок наступного|слідуючого| вигляду|виду|:
date; pwd; ls
Можна викликати|спричинити| shell як команду (!), що позначається|значиться| "sh", і передати їй файл "cmd", як аргумент або як перенаправлений вхід, тобто
$ sh cmd або $ sh <cmd
В результаті|унаслідок,внаслідок| виконання будь-якої з цих команд буде видана дата, потім ім'я поточного каталога, а потім вміст каталога.
Цікавіший і зручніший варіант роботи з|із| командним файлом - це перетворити його на виконуваний, тобто просто зробити його командою, що досягається зміною коду захисту. Для цього треба вирішити виконання цього файлу.
Наприклад
chmod 711 cmd
зробить код захисту "rwx__x__x". Тоді простий виклик
cmd
приведе до виконання тих же трьох команд.
Результат буде той же, якщо файл з|із| вмістом
date; pwd; ls
представлений|уявлений| у вигляді|виді|:
date
pwd
ls
оскільки|тому що| перехід на інший рядок також є|з'являється,являється| роздільником в послідовності команд.
Таким чином, виконуваними файлами можуть бути не тільки|не лише| файли, одержані|отримані| в результаті|унаслідок,внаслідок| компіляції і збірки|зборки,збирання|, але і файли, написані на мові|язиці| shell. Їх виконання відбувається|походить| в режимі інтерпретації за допомогою shell-інтерпретатора
Ще раз відзначимо, що shell-інтерпретатор, це всього лише одна з сотень команд ОС UNIX, що має рівні з|із| іншими привілеї|привілегії|.
3. Середовище|середа| shell (змінні і параметри)
На мові|язиці| shell можна писати командні файли і за допомогою команди "chmod" робити|чинити| їх виконуваними. Після|потім| цього вони ні чим не відрізняються від інших команд ОС UNIX.
3.1. shell-змінні
Ім'я shell-змінної - це послідовність букв|літер|, цифр і підкреслень, що починається з букви|літери|.
Значення shell-змінної - рядок символів.
Те, що в shell всього два типу даних: рядок символів і текстовий файл, з одного боку, дозволяє легко залучати до програмування кінцевих|скінченних| користувачів, які ніколи раніше програмуванням що не займалися, а з іншого боку, викликає|спричиняє| якийсь|деякий| внутрішній протест у|в,біля| багатьох програмістів, звиклих до істотно|суттєво| більшої різноманітності і більшої гнучкості мовних засобів.
Проте|однак| цікаво спостерігати те, як висококласні програмісти, освоївшись з|із| "правилами гри" shell, пишуть на ньому програми у багато разів швидше, ніж на Сі, але|та|, що особливо цікаво, у ряді випадків ці програми працюють навіть швидше, ніж реалізовані на Сі. (Але|та| це вже випадки "вищого пілотажу").
Ім'я змінної аналогічно традиційному уявленню про ідентифікатор, тобто ім'ям може бути послідовність букв|літер|, цифр і підкреслень, що починається з букви|літери| або підкреслення.
Для привласнення значень змінним може використовуватися оператор привласнення "=".
var_1=13 - "13" - це не число, а рядок з|із| двох цифр.
var_2="ОС UNIX" - тут подвійні лапки (" ") необхідні, оскільки|тому що| в рядку є пропуск|прогалина|.
Важливо|поважно|: Звернемо увагу на те, що, як змінна, так і її значення повинні бути записані без пропусків|прогалин| щодо|відносно| символу "=". До речі, як видно|показно| з|із| прикладів|зразків|, першим словом в командному рядку може стояти не тільки|не лише| ім'я команди, але і привласнення значення змінної. |
Можливі і інші способи привласнення значень shell-змінним. Так наприклад запис
DAT=`date`
призводить до того, що спочатку виконується команда "date" (зворотні лапки говорять про те, що спочатку повинна бути виконана увязнена в них команда), а результат її виконання, замість видачі на стандартний вихід, приписується як значення змінної, в даному випадку "DAT".
Можна привласнити значення змінної і за допомогою команди "read", яка забезпечує прийом значення змінної з (клавіатури) дисплея в діалоговому режимі. Звичайно команді "read" в командному файлі передує команда "echo", яка дозволяє заздалегідь видати якесь повідомлення|сполучення| на екран. Наприклад:
echo -n "Введіть|запровадьте| тризначне число:"
read x
При виконанні цього фрагмента командного файлу, після|потім| на екран повідомлення|сполучення|
Введіть|запровадьте| тризначне число:
інтерпретатор зупиниться|зупинятиметься| і чекатиме введення значення з клавіатури. Якщо ви ввели|запровадили|, скажімо, "753" те це і стане значенням змінної "x".
Одна команда "read" може прочитати (привласнити) значення відразу для декількох змінних. Якщо змінних в "read" більше, ніж їх введено|запроваджено| (через пропуски|прогалини|), залишилося привласнюється порожній|пустий| рядок. Якщо передаваних значень більше, ніж змінних в команді "read", то зайві ігноруються.
Попередження|попереджувати,запобігання|: Насправді інтерпретатор для продовження роботи чекає лише натиснення клавіші . Введене|запроваджене| вами число сприймається їм не як число, а як послідовність символів(!). Інтерпретатор не перевіряє, що ви ввели|запровадили|. Тому як значення змінної може опинитися будь-яка введена|запроваджена| абракадабра або просто натиснення, як значення порожнього|пустого| рядка. (Для забезпечення перевірки формату введення слід написати свою команду). |
При зверненні до shell-змінної необхідно перед ім'ям ставити символ "$". Так команди
echo $var_2
echo var_2
видадуть на екран
ОС UNIX
var_2
І ще один приклад|зразок|. Фрагмент командного файлу:
echo "var_2 = $var_2"
видасть на екран
var_2 = ОС UNIX
У команді "echo" перше використання "var_2" - це просто текст, а друге ("$var_2") - це значення відповідної змінної.
То що тут присутні пропуски|прогалини| між ім'ям змінної і символом привласнення, а також між символом привласнення і значенням, так це тому, що тут ми маємо справу|річ| лише з|із| текстом, куди підставлені значення змінних. Там, де дійсно виконується привласнення, пропуски|прогалини| в цих місцях НЕДОПУСТИМІ. Привласнення, скажімо w= означає привласнення змінного "w" порожнього|пустого| рядка. Але і порожній|пустий| рядок краще привласнювати акуратно, наприклад w="".
Для того, щоб ім'я змінної не зливалося з|із| рядком, наступним|слідуючим| за ім'ям змінної, використовуються фігурні дужки.
Хай|нехай| a=/mnt/lab/asu/ тоді
cat /mnt/lab/asu/prim
і
cat ${a}prim
рівноцінні (тобто "cat" видасть на екран вміст одного і того ж файлу).
Якщо також припустити|передбачити|, що в системі є змінна "prim" і "prim=dir", то команда
echo ${a}$prim
видасть на екран
/mnt/lab/asu/dir