- •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. Литература
3.6. Підстановки shell-інтерпретатора
Перед початком безпосередньої інтерпретації і виконанням команд, що містяться|утримуються| в командних файлах, shell виконує різні види підстановок:
ПІДСТАНОВКА РЕЗУЛЬТАТОВ. Виконуютьсяя всі команди, поміщені|ув'язнені| в зворотні лапки, і на їх місце підставляється результат.
ПІДСТАНОВКА ЗНАЧЕНЬ ПАРАМЕТРІВ І ПЕРЕМЕННЫХ. То є слова, що починаються|розпочинаються,зачинаються| на "$", замінюються відповідними значеннями змінних і параметрів.
ІНТЕРПРЕТАЦІЯ ПРОБЕЛОВ. Заекрановані пропуски|прогалини| ігноруються.
ГЕНЕРАЦІЯ ІМЕН ФАЙЛОВ. Проверяются слова на наявність в них спецсимволів ("*" "?","[]") і виконуються відповідні генерації.
Контрольні питання:
Які типи даних припустимі в shell? Чим є значення shell-змінної?
Які існують засоби привласнення значень змінним?
Як звертатися до shell-змінної?
В яких випадках треба використовувати екранування в командних файлах? Які символи для цього призначені?
Як можуть бути передані параметри у командний файл?
3.7. Програмне середовище
Кожен процес має середовище|середу|, в якому він виконується. Shell використовує ряд|лаву,низку| змінних цього середовища|середи|.
Якщо ви наберете команду "set" без параметрів, то на екран буде видана інформація про ряд|лаву,низку| стандартних змінних, створених при вході в систему (і передаваних далі всім вашим новим процесам "по спадку|спадщині|"), а також змінних, що створених і експортуються вашими процесами.
Конкретний вигляд|вид| і зміст|вміст,утримання| видаваної інформації неабиякою мірою залежить від того, яка версія UNIX використовується і як інстальована система:
HOME=/home/sae
PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11:
IFS=
LOGNAME=sae
MAIL=/var/spool/mail/sae
PWD=/home/sae/STUDY/SHELL
PS1=${PWD}:" "
PS2=>
SHELL=/bin/bash
TERM=linux
TERMCAP=console|con80x25|dumb|linux:li#25:co#80::
UID=501
perem=stroka
x=5
Прокоментуємо ці привласнення значень змінним.
HOME=/home/sae |
це ім'я домашнього|хатнього| директорія, в якому користувач (в даному випадку я) виявляється|опиняється| після|потім| входу в систему. Тобто|цебто|, правильно набравши ім'я і пароль, я опинюся в директорії "/home/sae". |
PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 |
ця змінна задає послідовність файлів (СТЕЖКУ), які проглядає "shell" у пошуках команди. Імена файлів розділяються тут двоеточиями|. Послідовність перегляду|проглядання| відповідає черговості проходження|дотримання| імен в стежці. АЛЕ|та| СПОЧАТКУ пошук відбувається|походить| серед так званих вбудованих команд. До числа вбудованих команд входять найбільш часто використовувані команди, наприклад "echo", "cd", "pwd", "date". Після|потім| цього система проглядає директорій "/bin", в якому можуть знаходитися|перебувати| команди "sh", "cp", "mv", "ls" і т.п. Потім директорій "/usr/bin" з|із| командами "cat", "сс|", "expr", "nroff", "man" і багатьма іншими. Далі пошук відбувається|походить| в поточному директорії (".", або інше позначення "порожньо|пусто|", тобто""), де швидше за все|скоріш за все| знаходяться|перебувають| написані вами команди (розрахунки). Після|потім| набору командного рядка і натиснення <Enter> "shell" (після|потім| виконання необхідних підстановок) розпізнає ім'я, відповідне команді і здійснює її пошук в директоріях, перерахованих в стежці. Якщо команда розміщена поза|зовні| цими директоріями, вона не буде знайдена. Якщо присутньо декількох команд з|із| однаковим ім'ям, то викликана|спричинена| буде та, яка розташована|схильна| в директорії, що переглядається|проглядається| першим. Стежку, як і інші змінні, можна легко міняти|змінювати,замінювати|, додаючи|добавляючи|, переставляючи або виключаючи директорії. (До речі, представлена|уявлена| стежка одержана|отримана| з|із| "справжньої|теперішньої,даної|" шляхом скорочень і перестановок). |
IFS= |
((Внутрішній Роздільник Полів) перераховує символи, які служать для розділення|поділу| слів (полів). Такими є|з'являються,являються| "пропуск|прогалина|", "табуляція" і "переклад|переведення,переказ| рядка", |
LOGNAME=sae |
ім'я входу ("ім'я" користувача). |
MAIL=/var/spool/mail/sae |
ім'я файлу, в який поступає|надходить| (електронна) пошта. |
PWD=/home/sae/STUDY/SHELL |
ім'я поточного директорія |
PS1=${PWD}:" " |
вид промптера|. В даному випадку в промптере| видаватиметься ім'я поточного директорія двокрапка і пропуск|прогалина|. Тобто|цебто| тут буде "/home/sae/STUDY/SHELL: ". |
PS2=> |
цей промптер| (тут ">") використовується як запрошення до продовження введення (у черговому рядку) незавершеної|незакінченої| команди. Наприклад, наберіть відкриваючу|відчиняючу| дужку "(" і після|потім| натиснення <Enter> у наступному|такому| рядку ви побачите цей промптер|. Якщо поки не знаєте, що далі робити|чинити|, наберіть закриваючу|зачиняючу| дужку ")" і він зникне. |
SHELL=/bin/bash |
ця змінна указує|вказує| оболонку, яку використовує користувач. В даному випадку використовується не (стандартний) shell ("sh"), а "просунута" версія . |
TERM=linux |
вказівка типу терміналу. -"bash", написана тим же автором (Bourne-Again SHell) TERMCAP=console|con80x25|dumb|linux:li#25:co#80:: (TERMinal CAPacity) це (дуже сильно) обрізаючий|обрізуючий| рядок завдання|задавання| параметрів терміналу. |
UID=501 |
ідентифікатор користувача (мій "501"). |
perem=stroka x=5 |
змінні, які ввів|запровадив| користувач. |
Початкове|вихідне| середовище|середа| встановлюється автоматично при вході в систему з використанням файлів типу "/etc/rc" і "/etc/.profile".
Важливе|поважне| зауваження: Один із способів просто змінить|поміняє| середовище|середу| (наприклад, стежку пошуку команд, вид промптера|, вид оболонки, колір|цвіт| екрану і т.п.) можна, розмістивши цю інформацію в своєму домашньому|хатньому| директорії в спеціалізованому файлі ".profile" (${HOME}/.profile), привласнивши потрібні значення змінним середовища|середи|. Тобто|цебто| викликати|спричинити| це файл в редактора і написати, що побажаєте|забажаєте|). Тоді при кожному вашому вході в систему цей файл автоматично виконуватиметься і встановлюватиме нове середовище|середу|. Цей файл повинен ОБОВ'ЯЗКОВО розміщуватися у вашому ДОМАШНЬОМУ|хатньому| директорії (директорії входу). |
Якщо ви внесли зміни в ".profile", то для перенесення|переносу| цих змін в середу необхідно виконати цей файл. Для цього можна вийти і наново|заново| увійти до системи, а можна скористатися (спеціально для цього випадку створеної) командою "." без виходу з|із| системи, тобто
. .profile
Слід мати на увазі, що імена файлів, що починаються з крапки|точки|, взагалі мають особливий статус. Так, вони не видаються на екран простою командою "ls" - необхідно викликати|спричиняти| цю команду з|із| прапором "-a". До речі, і не знищуються огульно командою "rm *". Дописати новий свій директорій "my" в стежку команд можна, записавши в ".profile", наприклад
PATH=${PATH}:/home/sae/my
або
PATH=${PATH}:${HOME}/my
Як правило, встановлювані змінні середовища|середи| слід експортувати. Наприклад
export TERM PATH REDKEYS MAIL
Окрім|крім| визначення змінних в ".profile" можна виконати команди, наприклад команда
stty -lcase
встановить термінал в режим "великі і маленькі букви|літери|"; а команда
cat заставка
видасть на екран заставку, яку ви самі підготуєте у файлі "заставка" з урахуванням|з врахуванням| ваших естетичних пристрастей і художніх здібностей.
Сам інтерпретатор shell автоматично привласнює значення наступним|слідуючим| змінним (параметрам):
? |
значення, повернене останньою командою; |
$ |
номер процесу; |
! |
номер фонового процесу; |
# |
число позиційних параметрів, що передаються в shell; |
* |
перелік параметрів, як один рядок; |
@ |
перелік параметрів, як сукупність слів; |
- |
прапори, що передаються в shell. |
При зверненні до цих змінних (т.е при використанні їх в командному файлі - shell-програмі) слід попереду|спереду| ставити "$".
Приклад|зразок|. Виклик розрахунку
specific par1 par2 par3
що має вигляд|вид|
###
# specific: Спеціальні параметри (змінні)
echo $0 - ім'я розрахунку
echo $? - код завершення
echo $$ - ідентифікатор останнього процесу
echo $! - ідентифікатор останнього фонового процесу
echo
echo $* - значення параметрів, як рядки
echo $@ - значення параметрів, як слів
echo
set -au
echo $- - режими роботи інтерпретатора
Видасть на екран
specific - ім'я розрахунку
0 - код завершення
499 - ідентифікатор останнього процесу
98 - ідентифікатор останнього фонового процесу
par1 par2 par3 - значення параметрів, як рядки
par1 par2 par3 - значення параметрів, як слів
au - режими роботи інтерпретатора
Код "0" відповідає нормальному завершенню процесу.
Важливу|поважну| роль при створенні|створінні| унікальних файлів грає спеціальна змінна "$$", значення якої відповідає номеру процесу, що виконує даний розрахунок. Кожен новий розрахунок, що виконується комп'ютером, ініціює один або декілька процесів, автоматично одержуючих номери по порядку. Тому, використовуючи як номер процесу імені файлу, можна бути упевненим, що кожен новий файл матиме нове ім'я (не запишеться|занотується| на місце того, що вже існує|наявний|). Гідність|чеснота,достоїнство| є|з'являється,являється| і головним недоліком|нестачею| такого способу іменування файлів. Невідомо, які імена будуть привласнені файлам. І, якщо в рамках|у рамках| даного процесу можна знайти файл "не дивлячись", тобто, звернувшись|обернувшись| до нього, використовуючи $$, то потім такі файли можна легко втратити|згубити,змарнувати,загубити|. Це створює додаткові проблеми при відладці програм.
"echo" без параметрів виводить порожній|пустий| рядок.
Відмінності $* і $@ полягає в тому, що перша змінна може бути представлена|уявлена| як
"par1 par2 par3"
а друга як
"par1" "par2" "par3"
Приклад|зразок|, що ілюструє відмінності "$*" і "$@" буде розглянутий|розгледіти| у зв'язку з оператором "for".
Для ілюстрації ми встановили командою "set" режими інтерпретатора ("a" - всі подальші|наступні| змінні експортуються; "u" - відсутність параметра вважати|лічити| помилкою), що і відобразилося|відбилося| в спеціальній змінній "$-".
Контрольні питання:
Що таке програмне середовище? Які стандартні змінні програмного середовища створюються при вході в систему?
Що позначають наступні змінні програмного середовища: ?, $, !, #, *, @. -?