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

     

     

     

     

     

         
     
    Програмування на Shell
         

     

    Інформатика, програмування
    Програмування на мові Shell в системі UNIX. Приклади програмування
    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)
    готова до прийому команд служить видається нею на екран промптер. У простому
    випадку це один долар ("$").
    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", тобто ">>" Додає в файл, якщо він непорожній.
    Символи "
    є введення буде закінчений, коли перша в черговий рядку буде "!".
    Можна поєднувати перенаправлення. Так
    wc-l file_4
    і
    wc-l> file_4
    виконуються однаково: підраховується кількість рядків файлу "file_3" і результат
    поміщається в файл "file_4".
    Засіб, що об'єднує стандартний вихід однієї команди зі стандартним входом
    інший, називається Конвеєри й позначається вертикальною рисою "".
    ls wc-l
    список файлів поточного каталогу буде направлений на вхід команди "wc", яка на
    екран виведе кількість стрічок каталогу.
    Конвеєром можна об'єднувати і більше двох команд, коли всі вони, можливо крім
    перший і останній - фільтри:
    cat file_1 grep-h result sort cat-b> file_2
    Даний конвеєр з файлу "file_1" ( "cat") вибере всі рядки, що містять слово
    "result" ( "grep"), відсортує ( "sort") отримані рядки, а потім Пронумеруйте
    ( "cat-b") і виведе результат у файл "file_2".
    Оскільки пристрої в ОС UNIX представлені спеціальними файлами, їх можна
    використовувати при перенаправлення. Спеціальні файли знаходяться в каталозі
    "/ dev". Наприклад, "lp" - друк; "console" - консоль; "ttyi" - i-ий термінал;
    "null" - фіктивний (порожній) файл (пристрій).
    Тоді, наприклад,
    ls>/dev/lp
    виведе вміст поточного каталогу на друк, а
    file_1
    обнулить файл "file_1".
    sort file_1 tee/dev/lp tail -20
    У цьому випадку буде відсортований файл "file_1" і переданий на друк, а 20
    останніх рядків також будуть видані на екран.
    Повернемося до перенаправлення виходу. Стандартні файли мають номери:
    0 - stdin,
    1 - stdout
    2 - stderr.
    Якщо вам не бажано мати на екрані повідомлення про помилку, ви можете
    перенаправити його з екрану у вказаний вами файл (або взагалі "викинути",
    перенаправивши в файл "порожнього пристрої" -/dev/null). Наприклад при виконанні
    команди
    cat file_1 file_2
    яка повинна видати на екран послідовно вміст файлів "file_1" і
    "file_2", видасть вам, наприклад, наступне
    111111 222222
    cat: f2: No such file or directory
    де 111111 222222 - вміст файлу "file_1", а файл "file_2" відсутній, про
    ніж команда "cat" видала повідомлення в стандартний файл діагностики, за замовчуванням,
    як і стандартний вихід, представлений екраном.
    Якщо вам не бажано таке повідомлення на екрані, його можна перенаправити в
    вказаний вами файл:
    cat file_1 file_2 2> f-err
    повідомлення про помилки будуть направлятися (про це говорить перенаправлення "2>") в
    файл "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
    В результаті виконання будь-якої з цих команд буде видана дата, потім ім'я
    поточного каталогу, а потім вміст каталогу.
    Більш цікавий і зручний варіант роботи з командним файлом - це перетворити
    його в що виконується, тобто просто зробити його командою, що досягається зміною
    коду захисту. Для цього треба дозволити виконання цього файлу.
    Наприклад,
    chmod 711 cmd
    зробить код захисту "rwx__x__x". Тоді простий виклик
    cmd
    призведе до виконання тих самих трьох команд.
    Результат буде той самий, якщо файл із вмістом
    date; pwd; ls
    представлений у вигляді:
    date
    pwd
    ls
    так як перехід на інший рядок також є роздільником в
    послідовності команд.
    Таким чином, виконуваними файлами можуть бути не тільки файли, отримані в
    результаті компіляції і збірки, але і файли, написані на мові shell. Їх
    виконання відбувається в режимі інтерпретації за допомогою shell-інтерпретатора
    2.5 Налагодження командних файлів
    У SHELL використовуються два механізми налагодження командних файлів.
    Перший з них: set-v виводить рядки командного файлу в міру їх читання. Цей
    режим застосовується при пошуку синтаксичних помилок. Для його використання не
    потрібно проводити модифікацію командного файлу, наприклад:
    sh-v proc ... тут proc - ім'я командного файлу. Ключ-v може використовуватися
    разом з опцією-n, що запобігає виконання наступних за ним команд (команда
    set-n блокує термінал до тих пір, поки не вводиться ознака кінця файлу EOF).
    Команда set-х виводить команди по мірі їх виконання, причому на термінал
    виводяться рядки програми і на місце змінних підставляються їх значення. Для
    скасування ключів-x і-v можна скористатися командою set - а для установки -
    присвоїти відповідне значення макропеременной.
    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
    3.2. Екранування
    Розглянемо більш детально прийоми екранування, що використовуються в shell. Як
    засобів захисту, використовуються подвійні лапки ( ""), одинарні лапки ( '
    ') Та бек-слеш ().
    З прикладів очевидно їх дію:
    Можна в одному рядку записувати кілька пріcваіваній.
    x = 22 y = 33 z = $ x
    A = "$ x" B = '$ x' C = $ x
    D = "$ x + $ y + $ z" E = '$ x + $ y + $ z' F = $ x + $ y + $ z
    (присвоювання G = $ x + $ y не було б виконано через прогалини)
    Тоді
    echo A = $ A B = $ B C = $ C
    echo D = $ D E = $ E F = $ F
    eval echo evaluated A = $ A
    eval echo evaluated B = $ B
    eval echo evaluated C = $ C
    Віддати на екран
    A = 22 B = $ x C = $ x
    D = 22 + 33 + 22 E = $ x + $ y + $ z F = 22 + 33 + 22
    evaluated A = 22
    evaluated B = 22
    evaluated C = 22
    Наведемо ще приклади, пов'язані з екрануванням перекладу рядка. Нехай
    змінної "string" присвоєно значення "масиву" 2x3:
    abc
    def
    Звернемо увагу, що для уникнення привласнення зайвих пробілів другий рядок
    масиву розпочато з першої позиції наступного рядка:
    string = "abc
    def "
    Тоді три варіанти запису змінної в команді "echo"
    echo $ string
    echo '$ string'
    echo "$ string"
    дадуть відповідно три різних результату:
    abc def
    $ string
    abc
    def
    а послідовність команд
    echo "str_1
    str_2 "> file_1
    echo 'str_1
    str_2 '> file_2
    cat file_1 file_2
    дасть видасть послідовно однакові файли file_1 і file_2:
    str_1
    str_2
    str_1
    str_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 = $ a
    a = `expr $ a + 1`; echo a = $ a
    b = `expr $ y - $ x`; echo b = $ b
    c = `expr $ x '*' $ y`; echo c = $ c
    d = `expr $ x/$ y`; echo d = $ d
    e = `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 a b з
    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 =" Times New Roman ">" без параметрів виводить на термінал стан
    програмного середовища.
    3.6. Підстановки shell-інтерпретатора
    Перед початком безпосередньої інтерпретації та виконанням команд, що містяться
    в командних файлах, shell виконує різні види підстановок:
    Підстановка РЕЗУЛЬТАТІВ. Виконуються всі команди, укладені в зворотні
    лапки, і на їх місце підставляється результат.
    Підстановка значення параметрів і змінних. Тобто слова, що починаються на
    "$", Замінюються відповідними значеннями змінних і параметрів.
    ІНТЕРПРЕТАЦІЯ ПРОБІЛ. Заекранірованние ігнорувати пробіли.
    ГЕНЕРАЦІЇ ІМЕН Фото. Перевіряються слова на наявність у них спецсимволів ("*",
    "?","[]") І виконуються відповідні генерації.
    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-програмі) слід попереду ставити "$".
    Важливу роль при створенні унікальних файлів грає спеціальна мінлива "$$",
    значення якої відповідає номеру процесу, що виконує даний розрахунок.
    Кожен новий розрахунок, що виконується комп'ютером, ініціює один або кілька
    процесів, автоматично одержують номери по порядку. Тому, використовуючи номер
    процесу як ім'я файлу, можна бути впевненим, що кожен новий файл
    буде мати нову назву (не запишеться на місце вже існуючого). Гідність
    є і головним недоліком такого способу найменування файлів. Невідомо,
    які імена будуть присвоєні файлів. І, якщо в рамках даного процесу можна
    знайти файл "не дивлячись", тобто, звернувшись до нього, використовуючи $ $, то потім такі
    файли можна легко втратити. Це створює додаткові проблеми при налагодженні
    програм.
    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_sorted
    file_2_sorted і file_3_sorted
    4.5. Оператор циклу з істинним умовою ( "while")
    Структура "while", також забезпечує виконання розрахунків, переважно
    тоді, коли невідомий заздалегідь точний список значень параметрів або цей
    список повинен бути отриманий в результаті обчислень в циклі.
    Оператор циклу "while" має структуру:
    while умова
    do
    список команд
    done
    де "while" - службове слово що визначає тип циклу з істинним умовою. Список
    команд у тілі циклу (між "do" і "done") повторюється до тих пір, поки
    зберігається істинність умови (тобто код завершення останньої команди в тілі
    циклу дорівнює "0") або цикл не буде перерваний зсередини спеціальними командами
    ( "break", "continue" ил
         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

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