ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Програмування на мові SHELL (OS UNIX )
         

     

    Інформатика, програмування

    МІЖНАРОДНИЙ СОЛОМОНІВ УНІВЕРСИТЕТ

    Факультет комп'ютерних наук

    ДОПОВІДЬ

    Сучасні операційні системи. на тему: Програмування на мові Shell в системі UNIX. Приклади програмування

    Підготував: Кригін А.В.
    Перевірив: проф. Погорілий С.Д.

    1999

    Зміст

    1. ВСТУП 3

    2. Прості засоби SHELL 4

    2.1. Структура команд 5

    2.2. Групування команд. 5

    2.3. Перенаправлення команд 7

    2.4. Командні файли. 10

    2.5 Налагодження командних файлів 10

    3. Середа SHELL (ЗМІННІ І ПАРАМЕТРИ) 11

    3.1. shell-змінні 11

    3.2. Екранування 12

    3.3. Маніпуляції з shell-змінними 14

    3.4. Експорт змінних 15

    3.5. Параметри 15

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

    3.7. Програмна середа 17

    4. ПРОГРАМНІ СТРУКТУРИ 20

    4.1. Команда test ( "[]") 20

    4.2. Умовний оператор "if" 21

    4.3. Оператор виклику ( "case") 22

    4.4. Оператор циклу з перерахуванням ( "for") 23

    4.5. Оператор циклу з істинним умовою ( "while") 23

    4.6. Оператор циклу з помилковим умовою ( "until") 24

    4.7. Порожній оператор 25

    4.8. Функції в shell 25

    4.9. Обробка переривань ( "trap") 25

    5. ЛІТЕРАТУРА 26

    1. ВСТУП

    Серед операційних систем особливе місце займає Unix. Безпрецедентнимє те, що ОС Unix може працювати практично на всіх випускаютьсяплатформах. UNIX - це стандарт де факто відкритих і мобільних операційнихсистем. (оскільки назва UNIX запатентовано компанією AT & T - різніЮникс називаються по-різному: SCO UNIX, BSDI, Solaris, Linux, DG/UX, AIX іт.д.).

    Це не тільки багатозадачна, але й розрахована на багато користувачів система. Воназабезпечує сучасний користувальницький інтерфейс на базі системи X
    Window і міжмашинна зв'язок на базі протоколів TCP/IP і т.п.

    ОС Unix була створена Кеном Томпсоном і Деннісом Рітчі у Bell
    Laborotories (AT & T). Широко поширюватися Unix/v7 (версія 7) почала в 79
    - 80-му роках. Вручення творцям Unix в 1983 році Міжнародної премії
    А. Тьюринга в області програмування ознаменувало визнання цієї системисвітової наукової (computer science) громадськістю. Що такожбезпрецедентно.

    ОС Unix стоїть на трьох китах: мова Сі, файлова система, командниймова. Надалі до них додалися система X Window і протоколи TCP/IP.

    2. Прості засоби SHELL

    Командний мова shell (у перекладі - раковина, шкаралупа) фактично ємова програмування дуже високого рівня. Цією мовою користувачздійснює управління комп'ютером. Зазвичай, після входу в систему випочинаєте взаємодіяти з командною оболонкою. Ознакою того, щооболонка (shell) готова до прийому команд служить видається нею на екранпромптер. У простому випадку це один долар ("$").< br>Shell не є необхідним і єдиним командним мовою (хоча самевін стандартизований в рамках POSIX [POSIX 1003.2] - стандарту мобільнихсистем). Наприклад, чималою популярністю користується мова cshell, є такожkshell, bashell та інші. Більше того, кожен користувач може створитисвій командний мову. Може одночасно на одному примірнику операційноїсистеми працювати з різними командними мовами.shell - це один з багатьох команд UNIX. Тобто в набір команд оболонки
    "shell" входить команда "sh" - виклик інтерпретатора "shell". Перший "shell"викликається автоматично при вашому вході в систему і видає на екранпромтер. Після цього ви можете викликати на виконання будь-які команди, в томучислі і знову сам "shell", який вам створить нову оболонку всерединіколишньою.
    Так наприклад, якщо ви підготуєте в редакторі файл "file_1": echo Hello!то це буде звичайний текстовий файл, що містить команду "echo", яка привиконання видає все написане правіше її на екран. Можна зробити файл
    "file_1" що виконуються за допомогою команди "chmod 755 file_1". Але його можнавиконати, викликавши явно команду "sh" ( "shell"): sh file_1або sh Файл можна виконати і в поточному екземплярі "shell". Для цього існуєспецифічна команда "." (точка), тобто

    . file_1
    Оскільки UNIX - система розрахована на багато користувачів, ви можете навіть наперсональному комп'ютері працювати паралельно, скажімо, на 12-ти екранах
    (перехід з екрана на екран ALT/функціональна клавіша), маючи на кожномуекрані нового (або одного і того ж) користувача зі свого командногооболонкою. Можете і в графічному режимі X-Window також відкрити великекількість вікон, а в кожному вікні може бути свій користувач зі свого командногооболонкою ...
    Стрижневих елементів мови shell є команда.

    2.1. Структура команд

    Команди в shell зазвичай мають наступний формат:


    Наприклад: ls-ls/usr/bin

    Де ls - ім'я команди видачі вмісту директорія,

    -ls - прапори ( "-" - ознака прапорів, l - довгий формат, s - об'емфайлів у блоках),

    /usr/bin - директорій, для якого виконується команда.
    Ця команда видасть на екран у довгому форматі вміст директорія
    / usr/bin, при цьому додасть інформацію про розмір кожного файлу у блоках.
    На жаль, така структура команди витримується далеко не завжди. Чи незавжди перед прапорами ставиться мінус, що не завжди прапори йдуть одним словом.
    Є різноманітність і в поданні аргументів. До числа команд, які маютьекзотичні формати, відносяться і такі "ходові" команди, як сс - викликкомпілятора мови З, tar - робота з архівами, dd - копіювання файлу зперетворенням, find - шукати файли і ряд інших.
    Як правило, перше слово shell сприймає, як команду. Тому вкомандному рядку cat catперше слово буде розшифровано shell, як команда (конкатенації), якавидасть на екран файл з ім'ям "cat" (друге слово), що знаходиться в поточномудиректорії.

    2.2. Групування команд.

    Засоби угруповання:

    . ; І - визначають послідовне виконання команд;

    . & - Асинхронне (фонове) виконання попередньої команди;

    . & & - Виконання наступної команди за умови нормального завершення попередньої, інакше ігнорувати;

    . | | - Виконання наступної команди при ненормальний завершення попередньої, інакше ігнорувати.
    При виконанні команди в асинхронному режимі (після команди стоїть однаамперсанд) на екран виводиться номер процесу, відповідний виконуваноїкоманді, і система, запустивши цей фоновий процес, знову виходить на діалогз користувачем.
    Наприклад, наберемо команду "find" у фоновому режимі для пошуку в системі,починаючи від кореня "/", файлу з ім'ям "conf", а потім "pwd" у звичайномурежимі. На екрані цей фрагмент буде виглядати наступним чином (курсивомвиділені коментарі):
    $ Find /-name conf-print & введення команди "find"
    288 номер (PID) фонового процесу
    $ Pwd введення команди "pwd"
    / mnt/lab/asu результат роботи "pwd"
    $ Повернення shell в промптер
    / usr/include/sys/conf результат роботи "find"

    Іноді необхідно, щоб усі фонові процеси завершилися, перш ніж будевиконуватися якийсь розрахунок. Для цього є спеціальна команда "wait
    [PID] ". Ця команда чекає завершення зазначеного ідентифікатором (числом)фонового процесу. Якщо команда без параметра, то вона чекає завершення всіхфонових процесів, дочірніх для даного "sh".
    Для угрупування команд також можуть використовуватися фігурні "()" і круглі
    "()" Дужки. Розглянемо приклади, що поєднують різні способи угруповання:
    Якщо введена командний рядок command1 & & command2; command3де command1, command2 і command3 - якісь команди, то "command2" будевиконана тільки при успішному завершенні "command1"; після будь-якого зрезультатів обробки "command2" (тобто "command2" буде виконана, абопропущена) буде виконано "command3". command1 & & (command2; command3)
    Тут обидві команди ( "command2" і "command3") будуть виконані тільки приуспішне завершення "command1".

    (command1; command2) &
    У фоновому режимі буде виконуватися послідовність команд "command1" і
    "command2".
    Фонові процеси складно знищити, оскільки традиційна команда "CTL/C"перериває тільки процеси переднього плану. Для знищення фоновогопроцесу треба знати його номер. При запуску фонового процесу на екранвидається число, відповідне номеру (ідентифікатором) цього процесу
    (PID). Якщо цей номер забутий або треба переконатися, що цей процес незакінчено, з допомогою команди ps-auxможна отримати перелік ідентифікаторів процесів (PID), іменакористувачів, поточний час, витрачений процесами, і т.д.
    У виведеної таблиці можна знайти номери процесів, що підлягають знищенню,наприклад це "849" і "866". Тоді командою kill -9 866 849можна знищити ці процеси. При знищенні процесів треба ви повиннімати те саме ім'я користувача, яке було приписано знищуваних процесамабо root.
    Круглі дужки "()", крім виконання функції угруповання, виконують іфункцію виклику нового екземпляра інтерпретатора shell.
    Нехай ми перебували в початковому каталозі "/ mnt/lab/asu"
    Тоді в послідовності команд cd ..; ls; lsдві команди "ls" видадуть 2 примірники вмісту каталогу "/ mnt/lab", апослідовність

    (cd ..; ls) lsвидасть спочатку вміст каталогу "/ mnt/lab", а потім вміст
    "/ mnt/lab/asu", тому що при вході в дужки викликається новий екземпляр shell, врамках якого і здійснюється перехід. При виході з круглих дужоквідбувається повернення до старого shell і в старий каталог.

    2.3. Перенаправлення команд

    Стандартний введення (вхід) - "stdin" в ОС UNIX здійснюється з клавіатуритерміналу, а стандартний висновок (вихід) - "stdout" спрямований на екрантерміналу. Існує ще і стандартний файл діагностичних повідомлень -
    "stderr", про який мова буде трохи пізніше.
    Команда, яка може працювати зі стандартним входом і виходом, називається
    Фільтри.
    Користувач має зручні засоби перенаправлення вводу і виводу наінші файли (пристрої). Символи ">" і ">>" позначають перенаправленнявиводу. ls> file_1команда "ls" сформує список файлів поточного каталогу і розмістить його вфайл "file_1" (замість видачі на екран). Якщо файл "file_1" до цьогоіснував, то він буде затертий новим. pwd>> file_1команда pwd сформує повне ім'я поточного каталогу і розмістить його в кінецьфайлу "file_1", тобто ">>" Додає в файл, якщо він непорожній.
    Символи "") в файл "f-err". До речі, ви можете всю інформацію направляти в одинфайл "ff", використавши в даному випадку конструкцію cat file_1 file_2>> ff 2> ff
    Можна вказати не тільки який зі стандартних файлів перенаправляти, а й уякий стандартний файл здійснити перенаправлення.

    cat file_1 file_2 2>> ff 1> & 2

    Тут спочатку "stderr" перенаправляється (в режимі додавання) в файл "ff",а потім стандартний вихід перенаправляється на "stderr", яким до цьогомоменту є файл "ff". Тобто результат буде аналогічний попередньому.

    Конструкція "1> & 2" - означає, що крім номера стандартного файлу, вякий перенаправити, необхідно попереду ставити "&"; вся конструкціяпишеться без пробілів.
    | - | Закриває стандартний висновок. |


    2.4. Командні файли.

    Для того, щоб текстовий файл можна було використовувати як команду,є кілька можливостей.
    Нехай за допомогою редактора створений файл з ім'ям "cmd", що містить однурядок наступного вигляду: date; pwd; ls
    Можна викликати shell як команду, що позначається "sh", і передати їй файл
    "cmd", як аргумент або як перенаправлених вхід, тобто

    $ sh cmdабо

    $ sh file_1echo 'str_1str_2 '> file_2cat file_1 file_2дасть видасть послідовно однакові файли file_1 і file_2:str_1str_2str_1str_2
    Зауважимо також, що бек-слеш () не тільки екранує наступний за нимсимвол, що дозволяє використовувати спеціальні символи просто як символи,що представляють самі себе (він може екранувати і сам себе -), але вкомандному файлі бек-слеш дозволяє об'едінять рядка в одну (екрануватикінець рядка).
    Наприклад, який наводив раніше приклад командного рядка: cat file_1 | grep-h result | sort | cat-b> file_2може бути записаний в командному файлі, скажімо, як cat file_1 | grep-h result | sort | cat-b> file_2
    До речі, ефект продовження командного рядка забезпечує і символконвеєра. У даному випадку це може дати більш симпатичний результат,наприклад: cat file_1 | grep-h result | sort | cat-b> file_2


    3.3. Маніпуляції з shell-змінними

    Незважаючи на те, що shell-змінні в загальному випадку сприймаються якрядка, тобто "35" - це не число, а рядок з двох символів "3" і "5", враді випадків вони можуть інтерпретуватися інакше, наприклад, як цілі числа.

    Різноманітні можливості має команда "expr".
    Проілюструємо деякі на прикладах:
    Виконання командного файлу: x = 7 y = 2 a = `expr $ x + $ y`; echo a = $ aa = `expr $ a + 1`; echo a = $ ab = `expr $ y - $ x`; echo b = $ bc = `expr $ x '*' $ y`; echo c = $ cd = `expr $ x/$ y`; echo d = $ de = `expr $ x% $ y`; echo e = $ eвидасть на екран a = 9 a = 10 b =- 5 c = 14 d = 3 e = 1

    Операція множення ("*") обов'язково повинна бути заекранірована, оскількив shell цей значок сприймається, як спецсимволів, що означає, що на цемісце може бути підставлено будь-яка послідовність символів.
    З командою "expr" можливі не тільки (цілочисельні) арифметичніоперації, але і рядкові:

    A = `expr 'cocktail': 'cock'`; echo $ A

    B = `expr 'cocktail': 'tail'`; echo $ B

    C = `expr 'cocktail': 'cook'`; echo $ C

    D = `expr 'cock': 'cocktail'`; echo $ D
    На екран будуть виведені числа, що показує число співпадаючих символів уланцюжках (від початку). Друга з рядків не може бути довшим перша:

    4

    0

    0

    0

    3.4. Експорт змінних

    В ОС UNIX існує поняття процесу. Процес виникає тоді, колизапускається на виконання будь-яка команда.
    Наприклад, при наборі на клавіатурі "р" породжується процес "р". Усвою чергу "р" може породити інші процеси. Припустимо, що "р" викликає
    "р1" і "р2", які послідовно породжують відповідні процеси.
    У кожного процесу є своя середу - безліч доступних йому змінних.
    Наприклад, до запуску "р" вже існувала середовище, в якому вже буливизначені деякі змінні. Запуск "р" породжує нове середовище; вже вній будуть породжені "р1" і "р2".
    Змінні локальні в рамках процесу, в якому вони оголошені, тобто де їмпривласнені значення. Для того, щоб вони були доступні і іншим породжуванимпроцесів, треба передати їх явно. Для цього використовуєтьсявбудована команда "export".

    3.5. Параметри

    У командний файл можуть бути передані параметри. У shell використовуютьсяпозиційні параметри (тобто істотна черговість їх прямування). Укомандному файлі відповідні параметрами змінні (аналогічно shell -змінним) починаються з символу "$", а далі йде одна з цифр від 0 до
    9:
    Нехай "examp-1" викликається за параметрами "cock" і "tail". Ці параметрипотрапляють в нове середовище під стандартними іменами "1" і "2". В (стандартній)змінної з ім'ям "0" буде зберігатися ім'я викликаного розрахунку.
    При зверненні до параметрів перед цифрою ставиться символ долара "$" (як іпри зверненні до змінних):
    | $ 0 | відповідає імені даного командного файлу; |
    | $ 1 | першим по порядку параметр; |
    | $ 2 | другий параметр і т.д. |


    Оскільки число змінних, в які можуть передаватися параметри,обмежений однією цифрою, тобто 9-ю ( "0", як уже зазначалося має особливийсенс), то для передачі більшої кількості параметрів використовується спеціальнакоманда "shift".
    Своєрідний підхід до параметрів дає команда "set".
    Наприклад, фрагмент set ab з echo перші = $ 1 друга = $ 2 третє = $ 3видасть на екран першого = a = b третій другій = cтобто команда "set" встановлює значення параметрів. Це буває дужезручно. Наприклад, команда "date" видає на екран поточну дату, скажімо, "Mon
    May 01 12:15:10 2000 ", що складається з п'яти слів, тоді set` date `echo $ 1 $ 3 $ 5видасть на екран

    Mon 01 2000
    Команда "set" дозволяє також здійснювати контроль виконання програми,наприклад:
    | set-v | на термінал виводяться рядки, що читаються shell. |
    | set + v | скасовує попередній режим. |
    | set-x | на термінал виводяться команди перед виконанням. |
    | set + x | скасовує попередній режим. |


    Команда "set" без параметрів виводить на термінал стан програмноїсередовища.

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

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

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

    2. Підстановка значення параметрів і змінних. Тобто слова, що починаються на "$", замінюються відповідними значеннями змінних і параметрів.

    3. ІНТЕРПРЕТАЦІЯ ПРОБІЛ. Заекранірованние ігнорувати пробіли.

    4. ГЕНЕРАЦІЇ ІМЕН Фото. Перевіряються слова на наявність у них спецсимволів

    ("*", "?","[]") і виконуються відповідні генерації.

    3.7. Програмне середовище

    Кожен процес має середовище, в якому він виконується. Shell використовує рядзмінних цього середовища.
    Якщо ви наберете команду "set" без параметрів, то на екран буде виданаінформація про ряд стандартних змінних, створених при вході в систему (іпереданих далі всім вашим новим процесам "у спадщину"), а такожзмінних, що створено та експортованих вашими процесами.
    Конкретний вигляд і зміст видаваної інформації значною мірою залежитьвід того, яка версія UNIX використовується і як інстальована система.


    Результат виконання команди set без параметрів (не повний):

    HOME =/root

    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
    Прокоментуємо значення змінних.
    HOME =/root - це ім'я домашнього директорія, в якому користувачвиявляється після входу в систему. Те їсть??, Правильно набравши ім'я та пароль,я опинюся в директорії "/ root".
    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" ібагатьма іншими. Далі пошук відбувається в поточному директорії (".", абоінше позначення "порожньо", тобто ""), де швидше за все знаходяться написанівами команди.
    Після набору командного рядка і натискання "shell" (після виконаннянеобхідних підстановок) розпізнає ім'я, відповідне команді іздійснює її пошук в директоріях, перелічених у PATH. Якщо командарозміщена поза цими тек, вона не буде знайдено. Якщо присутнядекілька команд з однаковими іменами, то викликана буде та, якарозташована в директорії, які проглядаються перший.
    PATH, як і інші змінні, можна легко змінювати, додаючи, переставляючиабо виключаючи директорії.
    IFS = (Внутрішній Роздільник Полів) перераховує символи, які служать дляподілу слів (полів). Такими є "пробіл", "табуляція" і "перекладстроки ", тому тут зліва від присвоєння нічого не видно і зайнято двірядка.
    LOGNAME = root - ім'я входу ( "ім'я" користувача).
    MAIL =/var/spool/mail/root - назва файлу, в який поступає (електронна)пошта.
    PWD =/root - ім'я поточного директорія
    PS1 = $ (PWD): "" - вид промтера. В даному випадку в промптере видаватиметьсяім'я поточного директорія двокрапка і пробіл. Тобто тут буде "/ root:".
    PS2 => - цей промтер (тут ">") використовується як запрошення до продовженнявведення (в черговий рядку) незакінченою команди. Наприклад, наберітьщо відкриває дужку "(" і після натискання в наступному рядку випобачите цей промптер. Якщо поки не знаєте, що далі робити, наберітьзаслони дужку ")" і він зникне.
    SHELL =/bin/sh - ця змінна вказує оболонку, яку використовуєкористувач. У даному випадку використовується стандартний shell ( "sh").
    Вихідна середу встановлюється автоматично при вході в систему звикористанням файлів типу "/ etc/rc" і "/ etc/.profile".
    Один із способів просто змінить середовище (наприклад, стежку пошуку команд, видпромтера, вид оболонки, колір екрану і т.п.) можна, розмістивши цю інформаціюв своєму домашньому директорії в спеціалізованому файлі ". profile"
    ($ (HOME) /. Profile), присвоївши потрібні значення змінних середовища. Тобтовикликати це файл в редактор і написати, що побажаєте). Тоді при кожномувашому вході в систему цей файл буде автоматично виконуватися івстановлювати нове середовище. Цей файл повинен ОБОВ'ЯЗКОВО розміщуватися у вашому
    Домашня директорія (директорії входу).
    Слід мати на увазі, що імена файлів, що починаються з крапки, взагалі маютьособливий статус. Так, вони не видаються на екран простий командою "ls" --необхідно викликати цю команду з прапором "-a". До речі, і не знищуютьсяогульно командою "rm *".
    Сам інтерпретатор shell автоматично присвоює значення наступнимзмінним (параметрами):
    |? | значення, повернене останньою командою; |
    | $ | Номер процесу; |
    |! | номер фонового процесу; |
    | # | Число позиційних параметрів, що передаються в shell; |
    | * | Перелік параметрів, як один рядок; |
    | @ | Перелік параметрів, як сукупність слів; |
    | - | Прапори, що передаються в shell. |


    При зверненні до цих змінним (тобто при використанні їх у командному файлі
    - Shell-програмі) слід попереду ставити "$".< br>Важливу роль при створенні унікальних файлів грає спеціальна мінлива
    "$$", Значення якої відповідає номеру процесу, що виконує данийрозрахунок. Кожен новий розрахунок, що виконується комп'ютером, ініціює одна абокілька процесів, автоматично одержують номери по порядку. Тому,використовуючи номер процесу як ім'я файлу, можна бути впевненим, щокожен новий файл буде мати нову назву (не запишеться на місце вжеіснуючого). Гідність є і головним недоліком такого способунайменування файлів. Невідомо, які імена будуть присвоєні файлів. І, якщов рамках даного процесу можна знайти файл "не дивлячись", тобто, звернувшись донього, використовуючи $ $, то потім такі файли можна легко втратити. Це створюєдодаткові проблеми при налагодженні програм.

    3.8. Виклик інтерпрітатора

    Слідом за реєстрацією користувача в системі (за допомогою команди login)викликається інтерпретатор мови SHELL. Якщо реєстраційний довідниккористувача містить файл. profile, то перш ніж з терміналуприйнята хоча б одна команда, інтерпретатор виконує цей файл
    (мається на увазі, що файл. profile містить команди). Коли Ви робите можутьвказуватися наступні ключі:
    -c рядок
    Команди зчитуються з заданої рядки.
    -s
    Команди читаються зі стандартного вводу файлу. Повідомлення інтерпретаторазаписуються в стандартний файл діагностик.
    -i
    Інтерактивний режим роботи.
    Якщо першим символом параметра "0" є знак -, то команди зчитуютьсяз файлу. profile.


    4. ПРОГРАМНІ СТРУКТУРИ

    Як у всякому мовою програмування в тексті на мові shell можуть бутикоментарі. Для цього використовується символ "#". Все, що знаходиться в рядку
    (в командному файлі) лівіше цього символу, сприймається інтерпретатором яккоментар. Наприклад,

    # Це коментар.
    Як у всякому процедурному мовою програмування в мові shell єоператори. Ряд операторів дозволяє керувати послідовністювиконання команд. У таких операторах часто необхідна перевірка умови,яка і визначає напрямок продовження обчислень.

    4.1. Команда test ( "[]")

    Команда test перевіряє виконання деякого умови. З використанням цієї
    (вбудованої) команди формуються оператори вибору і циклу мови shell.
    Два можливих формати команди: test умоваабо

    [умова]ми будемо користуватися другим варіантом, тобто замість того, щоб писатиперед умовою слово "test", будемо укладати умова в дужки, що більшезвично для програмістів.
    Насправді shell буде розпізнавати цю команду з відкриває дужки
    "[", Як речі, відповідного команді "test". Між дужками іщо містяться в них умовою обов'язково повинні бути пробіли.
    Прогалини мають бути і між значеннями і символом порівняння або операції
    У shell використовуються умови різних "типів".
    УМОВИ ПЕРЕВІРКИ Фото:
    |-f file | файл "file" є звичайним файлом; |
    |-d file | файл "file" - каталог; |
    |-с file | файл "file" - спеціальний файл; |
    |-r file | є дозвіл на читання файлу "file"; |
    |-w file | є дозвіл на запис у файл "file"; |
    |-s file | файл "file" не порожній. |

    УМОВИ ПЕРЕВІРКИ СТРОК:
    | 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
    Крім того, існують два стандартні значення умови, які можутьвикористовуватися замість умови (для цього не потрібні дужки).
    УМОВИ ПОРІВНЯННЯ цілих чисел:
    | x-eq y | "x" дорівнює "y", |
    | x-ne y | "x" нерівномірно "y", |
    | x-gt y | "x" більше "y", |
    | x-ge y | "x" більше або дорівнює "y", |
    | x-lt y | "x" менше "y", |
    | x-le y | "x" менше або рівне "y". |


    СКЛАДНІ УМОВИ:
    Реалізуються за допомогою типових логічних операцій:
    |! | (not) інвертує значення коду завершення. |
    |-o | (or) відповідає логічному "АБО". |
    |-a | (and) відповідає логічного "І". |


    4.2. Умовний оператор "if"

    У загальному випадку оператор "if" має структуру if умова then список

    [elif умова then список]

    [else список] fi
    Тут "elif" скорочений варіант від "else if" може бути використаний порядз повним, тобто допускається вкладення довільного числа операторів "if"
    (як і інших операторів). Зрозуміло "список" у кожному разі має бутиосмислений і допустимий в даному контексті.
    Самая усічена структура цього оператора if умова then список fiякщо виконано умову (як правило це ком отримано код завершення "0", товиконується "список", інакше він пропускається.
    Приклади.
    Нехай написаний "if-1" if [$ 1-gt $ 2] then pwd else echo $ 0: Hello! fi
    Тоді виклик if-1 12 11 дасть/home/sae/STUDY/SHELLа if-1 12 13 дасть if-1: Hello!

    4.3. Оператор виклику ( "case")

    Оператор вибору "case" має структуру: case рядок in шаблон) список команд;; шаблон) список команд;;

    ... шаблон) список команд;; esac
    Тут "case" "in" і "esac" - службові слова. "Рядок" (це може бути іодин символ) порівнюється з "шаблоном". Потім виконується "список команд"вибраної рядка.
    Незвично виглядають в кінці рядків вибору ";;", але написати тут ";" булоб помилкою. Для кожної альтернативи може бути виконано кілька команд.
    Якщо ці команди будуть записані в один рядок, то символ ";" будевикористовуватися як роздільник команд.
    Зазвичай останній рядок вибору має шаблон "*", що в структурі "case"означає "будь-яке значення". Цей рядок вибирається, якщо не відбулосязбіг значення змінної (тут $ z) ні з одним з раніше записанихшаблонів, обмежених дужкою ")". Значення проглядаються в порядкузапису.

    4.4. Оператор циклу з перерахуванням ( "for")

    Оператор циклу "for" має структуру: for назва [in список значень] do список команд doneде "for" - службове слово що визначає тип циклу,

    "do" і "done" - службові слова, що виділяють тіло циклу.
    Нехай команда "lsort" представлена командним файлом for i in file_1 file_2 file_3 do proc_sort $ i done
    У цьому прикладі ім'я "i" грає роль параметра циклу. Це ім'я можнарозглядати як shell-змінну, якої послідовно присвоюютьсяперераховані значення (i = file_1, i = file_2, i = file_3), і виконується уциклі команда "proc_sort".
    Часто використовується форма "for i in *", що означає "для всіх файлів поточногокаталогу ".
    Нехай "proc_sort" у свою чергу є командним файлом cat $ 1 | sort | tee/dev/lp> $ (1) _sortedтобто послідовно сортуються вказані файли, результати сортуваннявиводяться на друк ( "/ dev/lp") та направляються у файли file_1_sortedfile_2_sorted і file_3_sorted

    4.5. Оператор циклу з істинним умовою ( "while")

    Структура "while", також забезпечує виконання розрахунків,переважно тоді, коли невідомий заздалегідь точний список значеньустановку, або цей список повинен бути отриманий в результаті обчислень вциклі.
    Оператор циклу "while" має структуру: while умова do список команд doneде "while" - службове слово що визначає тип циклу з істинним умовою.
    Список команд в тілі циклу (між "do" і "done") повторюється до тих пір,поки зберігається істинність умови (тобто код завершення останньої командив тілі циклу дорівнює "0") або цикл не буде перерваний зсередини спеціальнимикомандами ( "break", "continue" або "exit"). При першому вході до циклу умоваповинно виконуватися.
    Команда "break [n]" дозволяє виходити з циклу. Якщо "n" відсутній, тоце еквівалентно "break 1". "n" вказує кількість вкладених циклів, зяких треба вийти, наприклад, "break 3" - вихід з трьох вкладених циклів.
    На відміну від команди "break" команда "continue [n]" лише припиняєвиконання поточного циклу і повертає на ПОЧАТОК циклу. Вона також можебути з параметром. Наприклад, "continue 2" означає вихід на початок другого
    (якщо рахувати з глибини) вкладеного циклу.
    Команда "exit [n]" дозволяє вийти взагалі з процедури з кодом повернення "0"або "n" (якщо параметр "n" вказаний). Ця команда може використовуватися нетільки в циклах. Навіть у лінійній послідовності команд вона може бутикорисна при налагодженні, щоб перестане виконувати (поточного) розрахунку взаданій точці.

    4.6. Оператор циклу з помилковим умовою ( "until")

    Оператор циклу "until" має структуру: until умова do список команд doneде "until" - службове слово що визначає тип циклу з помилковим умовою.
    Список команд в тілі циклу (між "do" і "done") повторюється до тих пір,поки зберігається хибність умови або цикл не буде перерваний зсерединиспеціальними командами ( "break", "continue" або "exit"). При першому вході вцикл умова не має виконуватися.
    Відмінність від оператора "while" полягає в тому, що умова циклу перевіряєтьсяна хибність (на ненульовий код завершення останньої команди тіла циклу)перевіряється ПІСЛЯ кожного (в тому числі і першими!) виконання команд тілациклу.
    Приклад. until false do read x if [$ x = 5] then echo enough; break else echo some more fi done
    Тут програма з нескінченним циклом чекає введення слів (повторюючи на екраніфразу "some more"), поки не буде введено "5". Після цього видається
    "enough" і команда "break" припиняє виконання циклу.

    4.7. Порожній оператор

    Порожній оператор має формат

    :
    Нічого не робить. Повертає значення "0 ".".

    4.8. Опції в shell

    Функція дозволяє підготувати список команд shell для подальшоговиконання.
    Опис функції має вигляд: ім'я ()

    (список команд

    )після чого звернення до функції відбувається по імені. При виконанні функціїне створюється нового процесу. Вона виконується в середовищі відповідногопроцесу. Аргументи функції стають її позиційними параметрами, а ім'яфункції - її нульовий параметр. Перервати виконання функції можна оператором
    "return [n]", де (необов'язкове) "n" - код повернення.

    4.9. Обробка переривань ( "trap")

    Буває необхідно захистити виконання програми від переривання.
    Найбільш часто доводиться зустрічатися з наступними переривань,відповідними сигналами:
    | 0 | вихід з інтерпретатора, |
    | 1 | відбій (відключення віддаленого абонента), |
    | 2 | переривання від, |
    | 9 | знищення (не перехоплюється), |
    | 15 | закінчення виконання. |


    Для захисту від переривань існує команда "trap", що має формат: trap 'список команд' сигнали
    Якщо в системі виникнуть переривання, чиї сигнали перераховані через пробіл у
    "сигнали", то буде виконаний "список команд", після чого (якщо в спискукоманд не була виконана команда "exit") управління повернеться в точкупереривання і продовжиться виконання командного файлу.
    Наприклад, якщо перед припиненням по перериваннях виконання якого текомандного файлу необхідно видалити файли в "/ tmp", то це може бутивиконано командою "trap": tarp 'rm/tmp/*; exit 1' 1 2 15яка передує іншим командам файлу. Тут, після видалення файлівбуде здійснено вихід "exit" з командного файлу.

    5. ЛІТЕРАТУРА

    1. http://www.citforum.ru/ftp/pub/os/shell-win.zip - Інтерпрітатор командного мови Shell

    2. http://www.citforum.ru/ftp/pub/os/manpages-win.zip - Man Pages українською

    3. http://www.citforum.ru/ftp/pub/os/handbook-win.zip - Free BSD Hand

    Book керівництво користувача.
    -----------------------< br>[1] Символ "

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status