- •1. Введення
- •2. Прості засоби|кошти| shell
- •2.1. Структура команд
- •2.2. Угрупування команд.
- •2.3. Перенаправлення команд
- •2.4. Генерація імен файлів.
- •2.5. Командні файли.
- •3. Середовище|середа| shell (змінні і параметри)
- •3.2. Екранування
- •3.3. Маніпуляції з|із| shell-змінними
- •3.4. Експорт змінних
- •3.5. Параметри
- •3.6. Підстановки shell-інтерпретатора
- •3.7. Програмне середовище
- •4. Програмні структури
- •4.1. Команда test ("[ ]")
- •4.2. Умовний оператор "if"
- •4.3. Оператор виклику ("case")
- •4.4. Оператор циклу з|із| переліком|перерахуванням| ("for")
- •4.5. Оператор циклу з|із| передумовою ("while")
- •4.6. Оператор циклу з|із| постумовою ("until")
- •4.7. Порожній оператор
- •4.8. Функції в shell
- •4.9. Обробка переривань ("trap")
- •5. Розробка графічного інтерфейсу за допомогою бібліотеки Qt3. Створення в kDevelop базової структури додатку
- •5.1. Словник
- •5.2. Створення|створіння| проекту
- •5.3. Робота з Qt Designer
- •5.4. Розробка інтерфейсу програми
- •5.5. Додавання|добавка| виджетов|
- •5.6. Створення|створіння| проміжків між виджетами|
- •5.7. Сигнали і слоти
- •5.8. Написання коду
- •6. Литература
4.4. Оператор циклу з|із| переліком|перерахуванням| ("for")
Оператор циклу "for" має структуру:
for ім'я [in список значень]
do
список команд
done
де "for" - службове слово що визначає тип циклу, "do" і "done" - службові слова, що виділяють тіло циклу. Не забувайте про "done"! Фрагмент "in список значень" може бути відсутнім.
Хай|нехай| команда "lsort" представлена|уявлена| командним файлом
for i in f1 f2 f3
do
proc-sort $i
done
В даному прикладі ім'я "i" грає роль параметра циклу. Це ім'я можна розглядати|розглядувати| як shell-змінну, якій послідовно привласнюються перераховані значення (i=f1, i=f2, i=f3), і виконується в циклі команда "procsort".
Часто використовується форма "for i in *", що означає "для всіх файлів поточного каталога".
Хай|нехай| "proc-sort" в свою чергу представляється командним файлом
cat $1 | sort | tee /dev/lp > ${1}_sorted
тобто послідовно сортуються вказані файли, результати сортування виводяться на друк|печатку| ("/dev/lp") і прямують у файли f1_sorted f2_sorted і f3_sorted
Можна зробити більш універсальною команду "lsort", якщо не фіксувати перелік файлів в команді, а передавати довільне їх число параметрами.
Тоді головна програма буде наступною|слідуючою|:
for i
do
proc-sort $i
done
Тут відсутність після|потім| "i" службового слова "in" з|із| переліком|перерахуванням| імен говорить про те, що список поступає|надходить| через параметри команди. Результат попереднього прикладу|зразка| можна отримати, набравши
lsort f1 f2 f3
Ускладнимо завдання|задачу| (під ім'ям "case-2") визначення холдингу фірми, що раніше розглядалося|розглядувалося|. Тепер можна при виклику указувати|вказувати| довільну кількість фірм. За відсутності в структурі оператора "for" фрагмента "in список значень", значення беруться з|із| параметрів зухвалої команди.
###
# holding: Довідник.
# Для різних фірм по імені видається
# назва холдингу, в який вона входить
for i
do
case $i in
ONE|TWO|THREE) echo Холдинг: ZERO ;;
MMM|WWW) echo Холдинг: Not-Net ;;
Hi|Hello|Howdoing) echo Холдинг: Привіт! ;;
*) echo Немає такої фірми ;;
esac
done
При виклику "holding Hello HELLO ONE" на екрані буде:
Холдинг: Привіт!
Немає такої фірми
Холдинг: Not-Net
Ще приклад|зразок|.
###
# subdir: Видає імена всіх піддиректоріїв
# директорія з|із| ім'ям $dir
for i in $dir/*
do
if [ -d $i ]
then echo $i
fi
done
Наступний|такий| розрахунок ілюструє корисний, хоч і з|із| часткою|долею| трюкацтва, спосіб повторення одних і тих же дій кілька разів. Змінна "i" приймає тут п'ять значень: 1, 2, 3, 4, 5, але|та| усередині циклу ця змінна відсутня і тому її значення ніякої|жодної| ролі не грає і ні чого не міняє|змінює,замінює|. З|із| таким же успіхом змінна "i" могла приймати значення, скажемо ф про до у|в,біля| з|із|, а в результаті точно також було б п'ять разів повторено одне і те ж обчислення|підрахунок| вмісту циклу без змін.
###
# print-5: Організації п'ятикратного виконання команди
for i in 1 2 3 4 5
do
cat file-22 > /dev/lp
done
Розрахунок "print-n" ілюструє ще одну корисну можливість|спроможність| у використанні циклу "for". Тут, після|потім| "for i ...", відсутні "in ..." і перелік імен, тобто переліком імен для "i" стає перелік параметрів, а отже кількість друкованих екземплярів|примірників| можна міняти|змінювати,замінювати|.
###
# print-n: Завдання|задавання| числа копій
# через параметри
for i
do
cat file-22 > /dev/lp
done
Сенс|зміст,рація| не зміниться, якщо перший рядок розрахунку записати як
for i in $*
оскільки значення "$*" - є список значень параметрів.
Відзначимо відмінність в спеціальних змінних "$*" і "$@", представляючих|уявляючих| перелік параметрів. Перший представляє|уявляє| параметри, як рядок, а другий, як сукупність слів.
Хай|нехай| командний файл "cmp" має вигляд|вид|:
for i in "$*"
do
echo $i
done
echo
for i in "$@"
do
echo $i
done
При виклику
cmp aa bb cc
на екран буде виведено
aa bb cc
aa
bb
cc