Приклади процедур shell

Правила створення каталогів

Для кожної процедури треба виконати наступні дії:

1. Створіть файл з ім'ям процедури і запишіть її туди.

2. Змініть права доступу до файлу за допомогою команди chmod.

3. Перемістіть файл в каталог, де зберігаються команди, наприклад, в ваш bin.

4. Переконайтеся, що в змінної PATH є ім'я вашого ката логу bin.

5. Виконайте вказану команду.

ls / bin / usr / bin | sort | uniq -d

Ця процедура визначає, які файли з однаковими іменами знаходяться в каталогах / bin та в / usr / bin. Файли в каталозі / bin в більшості випадків замінюють собою однойменні файли в каталозі / usr / bin.

# Копіює file1 в file2, file3 в file4.

while test "$ 2"! = ""

if test "$ 1"! = ""

then echo "$ 0: odd number of arguments"> 2

У цій процедурі показується, як використовувати цикл while для обробки списку позиційних параметрів, певним чином пов'язаних один з одним. Тут цикл while краще циклу for, оскільки за допомогою команди shift можна робити настроювання позиційних параметрів на обробку пов'язаних з ними аргументів.

# Копіює перераховані файли в каталог "dir"

# За умови, що зазначене не менше двох

# Аргументів, що "dir" є каталогом,

# І що кожний наступний аргумент

# Являє собою файл, доступний для читання.

then echo "$ 0: $ 1 is not a directory";> 2

else dir = $ 1; shift

do cp $ eachfile $ dir

Ця процедура використовує команду if для виведення повідомлень про неправильне застосування процедури. Цикл for в кінці процедури переглядає всі аргументи, крім першого.

# Читає стандартний ввід і виводить список

# Алфавітно-цифрових рядків, які відрізняються лише

# Розміром літер, представляючи їх в рядкової формі

tr -cs 'A-Za-z0-9' '\ 012' | sort -u | \

tr 'A-Z' 'a-z' | sort | uniq -d

Ця процедура є прикладом процесу, створюваного конвеєром. Символ \ в кінці першого рядка означає, що наступний рядок є продовженням. На перший погляд видається незрозумілим, як ця команда працює. З принципами роботи команд tr, sort і uniq можна ознайомитися в User's Reference. Команда tr перетворює всі символи, крім букв і цифр, в символи "новий рядок", після чого ущільнює повторювані символи. В результаті кожен набір літер виявиться в окремому рядку. Команда sort сортує рядки і залишає з будь-якій послідовності повторюваних рядків тільки один рядок. Наступна команда tr перетворює всі букви в рядкові, роблячи тим самим ідентифікатори, що відрізняються лише величиною букв, однаковими. Висновок знову сортується, все дублікати збираються разом. Команда "uniq -d" формує перелік рядків, що зустрічаються в тексті більш ніж один раз.

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

cmd1 | cmd2 | cmd3

cmd1> temp1; temp2;

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

# Формат: draft file (s)

# Висновок сторінок на принтер.

do nroff -man $ i | lpr

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

# Формат: edfind file arg

# Шукає остання поява в файлі "file" рядки,

# Що починається з підрядка "arg", після чого

# Виводить 3 рядки (попередню, знайдену,

Ілюстрація використання команди ed для редагування вихідних текстів, в яких Shell виконує підстановку значень змінних.

# Формат: edlast file

# Виводить останній рядок файлу

then echo "$ 0: Usage: $ 0 [-s] file." 1> 2

file $ * | fgrep 'text' | sed 's /:.*//'

Щоб визначити, які файли в каталозі містять тільки текстову інформацію, textfile фільтрує списки аргументів для інших команд. Наприклад, наступна командний рядок надрукує всі текстові файли в поточному каталозі:

pr `textfile *` | lpr

У процедурі використовується опція -s, що відбирає зі списку текстові файли.

# Формат: writemail message user

# Якщо користувач зареєструвався,

# Повідомлення виводиться на термінал;

# В іншому випадку, надсилається користувачеві.

Ілюстрація використання командної угруповання. Повідомлення, позначене як "$ 1", передається команді write, і, в разі невдалого завершення останньої, команді mail.

Схожі статті