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

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]*".

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

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

  2. Яка команда називається фільтром? Як позначають перенаправлення введення, виведення?

  3. Що таке конвейєр? Як він позначається?

  4. Як перенаправити повідомлення про помилку з екрану монітора у файл?

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

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