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

     

     

     

     

     

         
     
    Інтерпретатор командного мови shell
         

     

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

    Інтерпретатор командного мови shell 1. Основні поняття мови shell 1.1. Введення-вивід

    Три напрями вводу-виводу є виділеними - стандартне введення, стандартний висновок і стандартний протокол. Як правило, команди беруть вихідні дані з стандартного вводу і поміщають результати в стандартний вивід.

    Стандартні введення, висновок і протокол можна перепризначити. Позначення <<назва файлу>

    служить для перепризначення стандартного вводу (дескриптор файлу 0), > <Ім'я файлу>

    для стандартного виводу (дескриптор файла 1); <<<рядок>

    введення відбувається зі стандартного вводу, поки не зустрінеться вказана <рядок> або кінець файлу, >> <Ім'я файлу>

    для стандартного виводу; якщо файл існує, то виводиться інформація додається до кінець цього файлу, <& <цифра>

    як стандартне введення об (r) є файл, асоційований з дескриптором <цифра>; аналогічно для стандартного виводу > & <Цифра> <& - і> & --

    закривають відповідно стандартний ввід і виведення.

    Якщо будь-який з цих конструкцій передує цифра, то з вказаним файлом буде асоційований дескриптор, що дорівнює зазначеної цифри, замість 0 і 1 з замовчуванням. Наприклад, 2> <ім'я файлу>

    для стандартного протоколу використовується дескриптор 2, а 2> & 1

    асоціює дескриптор 2 з файлом, асоційованим з дескриптором 1. ... 2> protocol

    перепризначає стандартний протокол (дескриптор 2) у файл по імені protocol.

    Щоб перепризначити стандартний протокол туди ж, куди вже призначено стандартний висновок, слід вжити конструкцію ... 2> & 1

    Важливий порядок перепризначення: shell виробляє перепризначення зліва направо за вказаною списку. Так, 1> xxx 2> & 1

    спочатку асоціює дескриптор 1 з файлом xxx, а потім дескриптор 2 з 1, тобто теж з xxx. А 2> & 1 1> xxx

    асоціює дескриптор 2 з терміналом, а 1 - з файлом xxx.

    Можна перепризначити системний введення на поточний файл: isql - - <1.2. Синхронне і асинхронне виконання команд

    Зазвичай shell чекає завершення виконання команди. Проте є можливість запустити завдання в асинхронному режимі, тобто без очікування її завершення. Для цього після команди (після всіх її аргументів і вказівок про перепризначення введення-виведення) треба поставити знак &. При цьому за замовчуванням стандартний ввід команди призначається на порожній файл/dev/null.

    Приклад: створити файл primer можна по команді echo> primer

    Ще приклад: запустити програму prog в асинхронному режимі, щоб не треба було чекати його завершення, засікти час виконання, результати програми направити в файл prog.res, дані про час виконання - в файл prog.tim. time prog> prog.res 2> prog.tim & 1.3. Конвеєр

    Конвеєр - послідовність команд, розділених знаком |. Якщо після конвеєра варто; shell чекає його завершення. Якщо & - то не чекає. Роль; може грати кінець рядка. Сенс конвеєра в тому, що стандартний висновок однієї команди замикається на стандартний ввід іншої. Приклад конвеєра - підрахувати число про (r) проектних файлів у поточному каталозі. ls *. o | wc-l 1.4. Метасимволи, генерація імен файлів

    Метасимволи - символи, що мають спеціальне значення для інтерпретатора: ? *; & () | ^ <> <Пробіл> <табуляція> <возврат_кареткі>

    Проте кожен з цих символів може представляти самого себе, якщо перед ним стоїть. Усі символи, укладені між лапками 'і', представляють самих себе. Між в лапках ( ") виконуються підстановки команд (див. п. 2.2) і параметрів (див. п. 2.3), а символи,`, "і $ можуть екранувати попереднім символом.

    Після всіх підстановок в кожному слові команди шукаються символи *,?, і [. Якщо знаходиться хоча б одна з них, то це слово розглядається як шаблон імен файлів і замінюється іменами файлів, що задовольняють даним шаблоном (в алфавітному порядку). Якщо ні одне ім'я файлу не задовольняє шаблону, то він залишається незмінним. Значення зазначених символів:        *         будь-яка рядок, включаючи і порожню             ?         один будь-який символ             [...]         будь-який із зазначених між ними символів. Пара символів, розділених знаком -, означає будь-який символ,   який знаходиться між ними, включаючи і їх самих. Якщо першим символом після "[" йде "!", То зазначені символи не повинні входити до   назва файлу      2. Синтаксис мови shell 2.1. Коментарі

    Рядки, що починаються з #, трактуються як коментарі. 2.2. Підстановка результатів виконання команд

    Вирази можна укладати у зворотні лапки ( `). Такі вирази обчислюються в місці використання. Вони можуть бути, наприклад, частиною рядків. Приклад. Нехай параметром дії є ім'я файлу з розширенням. For. Потрібно видалити однойменний файл з розширенням. Err. name = `ena-n $ 1` rm-f $ (name). err

    Значення, отримане в результаті виконання команди ena-n $ 1

    присвоюється змінної name. Фігурні дужки використані для виділення аргументу операції переходу від імені до значення. Без них. Err приклеїлася б до імені. 2.3. Змінні і підстановка їх значень

    Всі змінні в мові shell - текстові. Їхні імена повинні починатися з літери і складатися з латинських букв, цифр і знака підкреслення (_). Щоб скористатися значенням змінної, треба перед нею поставити символ $. Використання значення змінної називається підстановкою.

    Розрізняється два класи змінних: позиційні і з ім'ям. Позиційні перемінні - це аргументи командних файлів, їх іменами служать цифри: $ 0 - ім'я команди, $ 1 - перший аргумент і т.д. Значення позиційним змінним можуть бути присвоєні і командою set (див. Спеціальні команди). Приклад. Після виклику програми на shellе, що зберігається у файлі ficofl: ficofl-d/*. for

    значенням $ 0 буде ficofl, $ 1 --d, $ 2 - /, $ 3 - *. for, значення решти позиційних змінних будуть порожніми рядками. Зауважимо, що якби символ * при виклику ficofl не був екранований, як аргументи передалися б імена всіх фортран файлів поточної директорії.

    Ще дві змінні зберігають командний рядок за винятком імені команди: $ @ еквівалентно $ 1 $ 2 ..., а $ * - "$ 1 $ 2 ...". Початкові значення змінним з ім'ям можуть бути встановлені таким чином: <ім'я> = <значення> [<ім'я> = <значення>] ...

    Не може бути одночасно функції (див. Керуючі конструкції) і змінної з однаковими іменами. Для підстановки значень змінних можливі також такі конструкції: $ (<мінлива>)

    якщо значення <змінної> визначено, то воно підставляється. Дужки застосовуються лише якщо за <змінної> слід символ, який без дужок приклеїться до імені. $ (<мінлива>: - <слово>)

    якщо <мінлива> визначена і не є символом нового рядка, то підставляється її значення; інакше підставляється <слово>. $ (<мінлива>: = <слово>)

    якщо <мінлива> не визначена або є символом нового рядка, їй присвоюється значення <слово>; після цього підставляється її значення. $ (<мінлива>:? <слово>)

    якщо <мінлива> визначена і не є символом нового рядка, то підставляється її значення; інакше на стандартний висновок виводиться <слово> і виконання shellа завершується. Якщо <слово> опущено, то видається повідомлення "parameter null or not set". $ (<мінлива>: + <слово>)

    якщо <мінлива> визначена і не є символом нового рядка, то підставляється <слово>; інакше підставляється порожній рядок.

    Приклад: якщо мінлива d не визначена або є символом нового рядка, то виконується команда pwd echo $ (d: - `pwd`)

    Наступні змінні автоматично встановлюються shell'ом:        #         кількість позиційних параметрів (десяткове)             --         прапори, вказані при запуску shellа або командою set             ?         десяткове значення, повернене попередньої синхронно виконаної командою             $         номер поточного процесу             !         номер останнього асинхронного процесу             @         еквівалентно $ 1 $ 2 $ 3 ...             *         еквівалентно "$ 1 $ 2 $ 3 ..."     

    Нагадаємо: щоб отримати значення цих змінних, перед ними треба поставити знак $. Приклад: видати номер поточного процесу: echo $ $ 2.4. Спеціальні змінні

    Shell'ом використовуються наступні спеціальні змінні:        HOME         директорія, в яку користувач потрапляє при вході в систему або при виконанні команди cd без   аргументів             PATH         список повних імен каталогів, в яких шукається файл за умов згадування його неповного імені.             PS1         основна рядок запрошення (за замовчуванням $)             PS2         додатковий рядок запрошення (за замовчуванням>); в інтерактивному режимі перед введенням команди   shell'ом виводиться основна рядок запрошення.
    Якщо натиснута клавіша new_line, але для завершення команди потрібно подальше   введення, то з'являється додатковий рядок запрошення             IFS         послідовність символів, які є роздільниками в командному рядку (за замовчанням   <пробіл>, <табуляція "і" возврат_кареткі>)      3. Керуючі конструкції

    Проста команда - це послідовність слів, поділена пробілами. Перше слово є ім'ям команди, яка буде виконуватися, а інші будуть передані їй як аргументи. Назва команди передається їй як аргумент номер 0 (тобто ім'я команди є значенням $ 0). Значення, що повертається простий командою -- це її статус завершення, якщо вона завершилася нормально, або (вісімкове) 200 + статус, якщо вона завершилася аварійно.

    Список - це послідовність одного або декількох конвеєрів, розділених символами;, &, & & або | | і, можливо, що закінчується символом; або &. З чотирьох зазначених операцій; і & мають рівні пріоритети, менші, ніж у & & і | |. Пріоритети останніх є рівними між собою. Символ; означає, що конвеєри будуть виконуватися послідовно, а & - паралельно. Операція & & (| |) означає, що список, наступний за нею буде виконуватися лише в тому випадку, якщо код завершення попереднього конвеєра нульовий (ненульовий).

    Команда - це або проста команда, або один з керуючих конструкцій. Кодом завершення команди є код завершення її останньої простої команди. 3.1. Цикл ДЛЯ for <мінлива> [in <набір>] do <список> done

    Якщо частина in <набір> опущена, то це означає in "$ @" (тобто in $ 1 $ 2 ... $ n). Приклад. Вивести на екран всі фортран файли поточної бібліотеки: for f in *. for do cat $ f done 3.2. Оператор вибору case $ <мінлива> in <шаблон> | <код країни ... ) <Список>;;. . . Esac

    Оператор вибору виконує <список>, що відповідає першій <шаблоном>, якому задовольняє <мінлива>. Форма шаблону та ж, що й використовується для генерації імен файлів. Частина | шаблон ... може бути відсутнім.

    Приклад. Визначити прапори і відкомпілювати всі вказані файли. # Ініціалізувати флагflag = # повторювати для кожного аргументаfor ado case $ a in # про (r) єдиного прапори, розділивши їх пробілами - [ocSO]) flag = $ flag '' $ a;; -*) echo 'unknown flag $ a' ;; # компілювати кожен вихідний файл і скинути прапори *. c) cc $ flag $ a; flag =;; *. s) as $ flag $ a; flag =;; *. f) f77 $ flag $ a; flag = ;; # неправильний аргумент *) echo 'unexpected argument $ a';; esacdone 3.3. Умовний оператор. if <список1> then <список2> [elif <спісок3> then <спісок4>]. . . [Else <спісок5>] fi

    Виконується <список1> і, якщо його код завершення 0, то виконується <список2>, інакше - <спісок3> і, якщо і його код завершення 0, то виконується <спісок4>. Якщо ж це не так, то виконується <спісок5>. Частини elif і else можуть бути відсутні. 3.4. Цикл ПОКИ while <список1> do <список2> done

    До тих пір, поки код завершення останньої команди <спіска1> є 0, виконуються команди <спіска2>. При заміні службового слова while на until умова виходу з циклу змінюється на протилежне.

    Як одна з команд <спіска1> може бути команда true (false). За цією командою не виконується ніяких дій, а код завершення встановлюється 0 (-1). Ці команди застосовуються для організації нескінченних циклів. Вихід з такого циклу можна здійснити лише за командою break (див. Спеціальні команди). 3.5. Опції <ім'я> () (<список>;)

    Визначається функція з ім'ям <ім'я>. Тіло функції - <список>, укладений між (та). 3.6. Зарезервовані слова

    Наступні слова є зарезервованими: if then else elif fi case in esac () for while until do done 3.7. Спеціальні команди

    Як правило, для виконання кожної команди shell породжує окремий процес. Спеціальні команди відрізняються тим, що вони вбудовані в shell і виконуються в рамках поточного процесу.        :         Порожня команда. Повертає нульовий код завершення.             . file         Shell читає і виконує команди з файлу file, потім завершується; при пошуку file використовується список   пошуку $ PATH.             break [n]         Вихід з внутрішнього for або while циклу; якщо вказано n, то вихід з n внутрішніх процедур.             continue [n]         Перейти до наступної ітерації внутрішнього for або while циклу; якщо вказано n, то перехід до   наступній ітерації n-ого циклу.             cd [<аргумент>]         Змінити поточну директорію на директорію <аргумент>. За замовчуванням використовується значення HOME.             echo [<АРГ> ... ]         Виводить свої аргументи на стандартний висновок, розділяючи їх пробілами.             eval [<АРГ> ... ]         Аргументи читаються, як якби вони надходили з стандартного вводу і розглядаються як команди,   які тут же і виконуються.             exec [<АРГ> ... ]         Аргументи розглядаються як команди shell'а і тут же виконуються, але при цьому не створюється нового   процесу. Як аргументи можуть бути вказані напрямки вводу-виводу і, якщо немає ніяких інших аргументів, то буде змінено лише напрямок   вводу-виводу поточної програми.             exit [n]         Завершення виконання shell'а з кодом завершення n. Якщо n опущено, то кодом завершення буде код   завершення останньої виконаної команди (кінець файлу також призводить до завершення виконання).             export [<мінлива> ... ]         Ці змінні відзначаються для автоматичного експорту в оточення (див. Оточення)   виконуваних команд. Якщо аргументи не вказані, то виводиться список всіх експортованих змінних. Імена функцій не можуть експортуватися.             hash [-r] [команда ... ]         Для кожної із зазначених команд визначається і запам'ятовується шлях пошуку. Опція-r видаляє всі   запомненние дані. Якщо не вказано ні один аргумент, то виводиться інформація про запомненних командах: hits - кількість звернень shell'а до даної команді;   cost - обсяг роботи для виявлення команди у списку пошуку; command - повне ім'я команди. У деяких ситуаціях відбувається перевичісленіе запомненних   даних, що відзначається позначкою * у полі hits.             pwd         Виводить ім'я поточної директорії.                     read [<мінлива> ... ]         Читається зі стандартного вводу один рядок; перше її слово присвоюється перша змінної, другий --   другий і т.д., причому всі залишилися слова присвоюються останньої змінної.             readonly [<мінлива> ... ]         Забороняється зміна значень зазначених змінних. Якщо аргумент не вказано, то виводиться   інформація про всі змінних типу readonly.             return [n]         Вихід з функції з кодом завершення n. Якщо n опущено, то кодом завершення буде код завершення   останньої виконаної команди.                     set [- aefkntuvx [<АРГ> ... ]]         Команда встановлює наступні режими:             -a         відзначити змінні, які були змінені або створені, як змінні оточення (див. Оточення)                     -e         якщо код завершення команди ненульовий, то негайно завершити виконання shell'а                     -f         заборонити генерацію імен файлів                     -k         всі змінні з ім'ям поміщаються в оточення команди, а не тільки ті, що передують імені   команди (див. Оточення)                     -n         читати команди, але не виконувати їх                     -t         завершення shell'а після введення і виконання однієї команди                     -u         при підстановці розглядати невстановлені змінні як помилки                     -v         вивести вводяться рядки відразу після їх введення                     -x         вивести команди і їхні аргументи перед їх виконанням                     --         не змінює прапори, корисний для привласнення позиційним змінним нових значень.       При вказівці + замість - кожен з прапорів встановлює протилежний режим. Набір поточних прапорів   є значення змінної $ -. <АРГ> - це значення, які будуть присвоєні позиційним змінним $ 1, $ 2 і т.д. Якщо всі аргументи опущені,   виводяться значення всіх змінних.             shift [n]         Позиційні змінні, починаючи з $ (n +1), перейменовуються в $ 1 і т.д. За замовчуванням n = 1.             test         обчислює умовні вирази (див. Додаткові відомості. Test)             trap [<АРГ>] [n] ...         Команда <АРГ> буде виконана, коли shell отримає сигнал n (див. Сигнали). (Треба зауважити, що   <АРГ> перевіряється при установці переривання і при отриманні сигналу). Команди виконуються по порядку номерів сигналів. Будь-яка спроба встановити   сигнал, ігнорований даним процесом, не обробляється. Спроба переривання по сигналу 11 (segmentation violation) призводить до помилки. Якщо <АРГ>   опущений, то всі переривання встановлюються в їх початкові значення. Якщо <АРГ> є порожній рядок, то цей сигнал ігнорується shell'ом і   викликаються їм програмами. Якщо n = 0, то <АРГ> виконується при виході з shell'а. Trap без аргументів виводить список команд, пов'язаних з кожним   сигналом.             type [<ім'я> ... ]         Для кожного імені показує, як воно буде інтерпретуватися при використанні в якості   імені команди: як внутрішня команда shell'а, що ім'я файлу або ж такого файлу немає взагалі.             ulimit [-f] [n]         Встановлює розмір файлу в n блоків;-f - встановлює розмір файлу, який може бути записаний   процесом-нащадком (читати можна будь-які файли). Без аргументів - виводить поточний розмір.             umask [nnn]         Користувацька маска створення файлів змінюється на nnn. Якщо nnn опущено, то виводиться поточний   значення маски. Приклад: після команди umask 755 будуть створюватися файли, які власник зможе читати, писати і виконувати, а всі інші - тільки   читати і виконувати.             unset [<ім'я> ... ]         Для кожного імені видаляє змінну або функцію. Змінні PATH, PS1, PS2 та IFS НЕ   можуть бути видалені.             wait [n]         Чекає завершення зазначеного процесу і виводить код його завершення. Якщо n не вказано, то очікується   завершення всіх активних процесів-нащадків і повертається код завершення 0.      4. Виконання shell-програм 4.1. Запуск shell'а

    Програма, що інтерпретує shell-програми, знаходиться у файлі/bin/sh. При запуску її перший аргумент є ім'ям shell-програми, інші передаються як позіціональние параметри. Якщо файл, що містить shell-програму, має право виконання (x), то достатньо вказівки лише його імені. Наприклад, наступні дві команди операційної системи еквівалентні (якщо файл ficofl володіє зазначеним правом і насправді містить shell-програму): sh ficofl-d. g * і ficofl-d. g * 4.2. Виконання

    При виконанні shell-програм виконуються всі підстановки. Якщо ім'я команди збігається з ім'ям спеціальної команди, то вона виполнается в рамках поточного процесу. Так само виконуються і певні користувачем функції. Якщо ім'я команди не збігається ні з ім'ям спеціальної команди, ні з ім'ям функції, то породжується новий процес і здійснюється спроба виконати подану команду.

    Змінна PATH визначає шлях пошуку директорії, що містить цю задачу. За умовчанням це ::/bin:/usr/bin:/util:/dss/rk

    Директорії пошуку розділяються двокрапками;:: означає поточну директорію. Якщо ім'я команди містить символ /, значення $ PATH не використовується: імена, що починаються з/шукаються від кореня, решта - від поточної директорії. Положення знайденої команди запам'ятовується shellом і може бути опитано командою hash. 4.3. Оточення

    Оточення - це набір пар ім'я-значення, які передаються виконуваної програмі. Shell взаємодіє з оточенням кількома способами. При запуску shell створює змінну для кожної зазначеної пари, надаючи їй відповідне значення. Якщо ви зміните значення будь-якої з цих змінних або створите нову змінну, то це не зробить ніякого впливу на оточення, якщо не буде використана команда export для зв'язку змінної shell'а з оточенням (див. також set-a). Змінна може бути видалена з оточення командою unset (див.). Таким чином, оточення кожної з виконуваних shell'ом команд формується з усіх незмінених пар ім'я-значення, спочатку отриманих shell'ом, мінус пари, видалені командою unset, плюс всі модифіковані та змінені пари, які для цього повинні бути вказані в команді export.

    Оточення простих команд може бути сформовано зазначенням перед нею одного або декількох Присвоєння змінній. Так, TERM = d460 <команда> і (export TERM; TERM = d460; <команда>)

    еквівалентні. Змінні, що беруть участь в таких привласнення, назвемо ключовими параметрами.

    Якщо встановлений прапор-k (див. set), то всі ключові параметри поміщаються в оточення команди, навіть якщо вони записані після команди. 4.4. Сигнали

    UNIX'ом підтримуються наступні сигнали:        SIGHUP         - 1 --         скасувати (hangup)             SIGINT         - 2 --         переривання (interrupt)             SIGQUIT         - 3 --         нестандартний вихід (quit)             SIGILL         - 4 --         невірна команда (illegal instruction)             SIGTRAP         - 5 --         пастка (trace trap)             SIGFPE         - 8 --         виняткова ситуація при виконанні операцій з плаваючою комою (floating-point exception)             SIGKILL         - 9 --         знищення процесу (kill)             SIGBUS         - 10 --         помилка шини (bus error)             SIGSEGV         - 11 --         порушення сегментації (segmentation violation)             SIGSYS         - 12 --         невірний системний виклик (bad argument to system call)             SIGPIPE         - 13 --         запис у канал без читання з нього (write on a pipe with no one to read it)             SIGALRM         - 14 --         будильник (alarm clock)             SIGTERM         - 15 --         програмне завершення процесу (software termination signal)     

    Сигнали SIGINT і SIGQUIT ігноруються, якщо команда була запущена асинхронно. Інакше сигнали обробляються так само, як в процесі-предка, за винятком сигналу SIGSEGV (див. також Спеціальні команди. Trap). 4.5. Зауваження

    При виконанні команд запам'ятовується їх місцезнаходження. Тому при створенні команди з тим же ім'ям, але що знаходиться в іншій теці, все одно буде виконуватися стара команда (якщо виклик відбувається за коротким імені). Для виправлення ситуації скористайтеся командою hash з ключем-r (див. Спеціальні команди).

    Якщо ви перейменували поточну або вищерозміщених директорію, то команда pwd може давати невірну інформацію. Для виправлення ситуації скористайтеся командою cd з повним ім'ям директорії. 5. Додаткові відомості 5.1. Команда test

    Команда test застосовується для перевірки умови. Формат виклику: test <вираз> або [<вираз>]

    Команда test обчислює <вираз> і, якщо його значення - істина, повертає код завершення 0 (true); інакше - нульове значення (false). Ненульовий код завершення повертається і якщо опущені аргументи. <Вираз> може складатися з таких примітивів:        -r файл         - Істина, якщо файл існує і доступний для читання             -w файл         - Істина, якщо файл існує і доступний для запису             -x файл         - Істина, якщо файл існує і є виконуваним             -f файл         - Істина, якщо файл існує та є звичайним файлом             -d файл         - Істина, якщо файл існує та є каталогом             c-файл         - Істина, якщо файл існує і є спеціальним символьно-орієнтованим файлом             -b файл         - Істина, якщо файл існує і є спеціальним блок-орієнтованим файлом             -p файл         - Істина, якщо файл існує і є іменованих каналом (pipe)             -s файл         - Істина, якщо файл існує і має ненульову довжину             -t [дескриптор файлу]         - Істина, якщо відкритий файл із зазначеним дескриптором (за умовчанням 1) існує і асоційований з   терміналом             -z s1         - Істина, якщо довжина рядка s1 нульова             -n s1         - Істина, якщо довжина рядка s1 ненульова             s1 = s2         - Істина, якщо рядки s1 і s2 збігаються             s1! = s2         - Істина, якщо рядки s1 і s2 не збігаються             s1         - Істина, якщо s1 непорожній рядок             n1-eq n2         - Істина, якщо цілі n1 і n2 алгебраїчних збігаються. На місці-eq можуть бути також-ne,-gt,-ge,   -lt,-le      5.2. Команда expr

    Команда expr застосовується для обчислення виразів. Результат виводиться на стандартний висновок. Операнди вирази повинні бути розділені пробілами. Метасимволи повинні бути екрановані. Треба зауважити, що 0 повертається як числа, а не для індикації порожнього рядка. Рядки, що містять пробіли або інші спеціальні символи, повинні бути укладені в лапки. Цілі розглядаються як 32-бітові числа.

    Нижче наведений список операторів у порядку зростання пріоритету, операції з рівним пріоритетом укладені у фігурні дужки. Перед символами, які повинні бути екрановані, варто.        <вир> | <вир>         якщо перша <вир> не пусте і не нульове, то повертає його, інакше повертає другий <вир>             <вир> & <вир>         якщо обидва <вир> не порожні і не нульові, то повертає перший <вир>, інакше повертає 0             <вир> (=,>,> =, <, <=,! =) <вир>         повертає результат цілочисельного порівняння якщо обидва <вир> - цілі; інакше повертає   результат лексичного порівняння             <вир> (+, -) <вир>         додавання і віднімання цілочисельних аргументів             <вир> (*, /,%) <вир>         множення, ділення та отримання залишку від ділення цілочисельних аргументів             <вир>: <вир>         оператор зіставлення: порівнює перший аргумент з другим, який повинен бути регулярним   виразом. Зазвичай оператор порівняння повертає число символів, що задовольняють зразком (0 при невдалому порівнянні). Однак символи (и)   можуть застосовуватися для виділення частини першого аргументу.     

    Регулярний вираз будується наступним чином:        .         - Позначає будь-який символ             *         - Позначає попередній символ, повторений кілька разів             []         - Позначають будь-який один із зазначених між ними символів; група символів може позначатися за допомогою   знака "-" (тобто [0-9] еквівалентно [0123456789]); якщо після [варто ^, то це еквівалентно будь-якому символу, крім зазначених у дужках і   <возврата_кареткі>; для вказівки] в якості зразка, треба поставити її відразу за [(тобто []...]);. і * всередині квадратних дужок позначають самих   себе     

    Всі інші символи (і ^, якщо стоїть не в квадратних дужках) позначають самих себе. Для вказівки символів., *, [І] треба екранувати їх (тобто писати ., *, [,]). Приклади.

    1. a = `expr $ a + 1`

    - збільшення на 1 змінної a

    2. expr $ a:'.*/(.*)' | $ a

    - виділяє з імені файлу коротку назву (тобто з/usr/util/ena виділяється ena). Увага, одиночний символ/буде сприйнятий як знак операції ділення.

    3. expr $ VAR: '.*'

    - отримання кількості символів змінної VAR.

    У як побічний ефект expr повертає наступні коди завершення:        0         - Якщо вираз не нуль і не порожній рядок             1         - Якщо вираз нуль або порожній рядок             2         - Для некоректних виразів     

    Команда expr також видає наступні повідомлення про помилки:        syntax error         - Для помилок в операторах або операнда             non-numeric argument         - Для спроб застосування арифметичних операцій до нечислових рядках      Зауваження.

    Припустимо, що ми хочемо порівняти значення змінної a з будь-яким символом, що має для expr особливий сенс, наприклад, зі знаком рівності. Нехай $ a на самому справі є знаком рівності. Так як аргументи попередньо обробляються shell'ом, то команда expr $ a = '='

    буде сприйнята як expr = = =

    що синтаксично некоректно. У подібних випадках треба користуватися таким прийомом: expr X $ a = X =

    тобто додаванням деякого символу до обох рядках, що ніяк не впливає на результат порівняння, однак дозволяє уникнути синтаксичної помилки. 5.3. Команда ena

    Команда ena дозволяє отримати частини повного імені файлу. Перший аргумент - прапор, другий - ім'я файлу. Команда розрізняє наступні прапори:        -n         - Назва файлу без розширення             -f         - Ім'я файлу з розширенням             -e         - Розширення             -d         - Ім'я директорії             -p         - Якщо ім'я файлу починається с. або .. , То ці символи виділяються з імені     

    Нижче наводиться текст програми ena, що зберігається в/util/ena. # Get part of pathname case $ 1 in-n) expr $ 2:'.*/(.*)[.].*' | $ 2:'(.*)[.].*' | $ 2;;-f) expr $ 2:'.*/(.*)' | $ 2;;-e) expr $ 2:'.*([.][^./]*)' | '';;-d) expr $ 2: '(. *)/.*' | $ 2;;-p) expr $ 2:'([.])/.*' | $ 2:'([.][.])/.*' | '';; *) echo "error: unknown part of pathname $ 1" exit 2;; esac

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

     

     

     

     

     

     

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