Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SPO_SRS.doc
Скачиваний:
5
Добавлен:
02.05.2019
Размер:
1.06 Mб
Скачать

3.6. Підстановки shell-інтерпретатора

Перед початком безпосередньої інтерпретації і виконанням команд, що містяться|утримуються| в командних файлах, shell виконує різні види підстановок:

ПІДСТАНОВКА РЕЗУЛЬТАТОВ. Виконуютьсяя всі команди, поміщені|ув'язнені| в зворотні лапки, і на їх місце підставляється результат.

ПІДСТАНОВКА ЗНАЧЕНЬ ПАРАМЕТРІВ І ПЕРЕМЕННЫХ. То є слова, що починаються|розпочинаються,зачинаються| на "$", замінюються відповідними значеннями змінних і параметрів.

ІНТЕРПРЕТАЦІЯ ПРОБЕЛОВ. Заекрановані пропуски|прогалини| ігноруються.

ГЕНЕРАЦІЯ ІМЕН ФАЙЛОВ. Проверяются слова на наявність в них спецсимволів ("*" "?","[]") і виконуються відповідні генерації.

Контрольні питання:

  1. Які типи даних припустимі в shell? Чим є значення shell-змінної?

  2. Які існують засоби привласнення значень змінним?

  3. Як звертатися до shell-змінної?

  4. В яких випадках треба використовувати екранування в командних файлах? Які символи для цього призначені?

  5. Як можуть бути передані параметри у командний файл?

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" - відсутність параметра вважати|лічити| помилкою), що і відобразилося|відбилося| в спеціальній змінній "$-".

Контрольні питання:

  1. Що таке програмне середовище? Які стандартні змінні програмного середовища створюються при вході в систему?

  2. Що позначають наступні змінні програмного середовища: ?, $, !, #, *, @. -?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]