- •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.2. Умовний оператор "if"
У загальному|спільному| випадку оператор "if" має структуру
if умова
then список
[elif умова
then список]
[else список]
fi
Тут "elif" скорочений варіант від "else if" може бути використаний разом з|поряд з,поряд із| повним|цілковитим|, тобто допускається вкладення довільного числа операторів "if" (як і інших операторів). Зрозуміло "список" у кожному випадку повинен бути осмислений і допустимий в даному контексті.
Конструкції
[elif умова
then список]
і
[else список]
не є|з'являються,являються| обов'язковими (в даному випадку для вказівки на необов'язковість конструкцій використані квадратні дужки - не плутати|путати| з|із| квадратними дужками команди "test"!).
Сама усічена структура цього оператора
if умова
then список
fi
якщо виконано умову (як правило це грудка одержаний|отриманий| код завершення "0", то виконується "список", інакше він пропускається.
Зверніть увагу, що структура обов'язково завершується службовим словом "fi". Число "fi", природно, завжди повинне відповідати числу "if".
Приклади|зразки|.
Хай|нехай| написаний розрахунок "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!
Можливо використовувати в умові та властивість shell, що команди можуть видавати різний код завершення. Це нагадує прийоми програмування на Сі. Хай|нехай| розрахунок "if-2" буде
if a=`expr "$1" : "$2"`
then echo then a=$a code=$?
else echo else a=$a code=$?
Fi
тоді виклик
if-2 by by
дасть
then a=2 code=0
а
if-2 by be
дасть
else a=0 code=1
Ще приклад|зразок| на вкладеність
###
# if-3: Оцінка досягнень
echo -n " А яку оцінку одержав|отримав| на іспиті|екзамені|?: "
read z
if [ $z = 5 ]
then echo Молодець !
elif [ $z = 4 ]
then echo Все одно молодець !
elif [ $z = 3 ]
then echo Все одно !
elif [ $z = 2 ]
then echo Все !
else echo !
fi
Можна звернути увагу на те, що бажано використовувати зрушення|зсуви| при записі програм, щоб краще виділити вкладеність структур.
4.3. Оператор виклику ("case")
Оператор вибору "case" має структуру:
case рядок in
шаблон) список команд;;
шаблон) список команд;;
...
esac
Тут "case" "in" і "esac" - службові слова. "Рядок" (це може бути і один символ) порівнюється з|із| "шаблоном". Потім виконується "список команд" вибраного рядка. Незвичним буде службове слово "esac", але|та| воно необхідне для завершення структури.
Приклад|зразок|.
###
# case-1: Структура "case".
# Що вже розглядався|розглядувався| у зв'язку з
# структурою "if" приклад|зразок| простіше і
# наочніше|наглядніше| можна реалізувати з|із|
# допомогою структури "case".
echo -n " А яку оцінку одержав|отримав| на іспиті|екзамені|?: "
read z
case $z in
5) echo Молодець ! ;;
4) echo Все одно молодець ! ;;
3) echo Все одно ! ;;
2) echo Все ! ;;
*) echo ! ;;
esac
Незвично виглядають в кінці|у кінці,наприкінці| рядків вибору ";;", але|та| написати тут ";" було б помилкою. Для кожної альтернативи може бути виконано декілька команд. Якщо ці команди будуть записані в один рядок, то символ ";" використовуватиметься як роздільник команд.
Звичайно останній рядок вибору має шаблон "*", що в структурі "case" означає "будь-яке значення". Цей рядок вибирається, якщо не відбувся збіг значення змінної (тут $z) ні з|із| одним з раніше записаних шаблонів, обмежених дужкою ")". Значення є видимими у порядку|ладі| запису.
###
# case-2: Довідник.
# Для різних фірм по імені видається
# назва холдингу, в який вона входить
case $1 in
ONE|TWO|THREE) echo Холдинг: ZERO ;;
MMM|WWW) echo Холдинг: Not-Net ;;
Hi|Hello|Howdoing) echo Холдинг: Привіт! ;;
*) echo Немає такої фірми ;;
esac
При виклику "case-2 Hello" на екран буде виведено:
Холдинг: Привіт!
А при виклику "case-2 HELLO" на екран буде виведено:
Немає такої фірми
Якщо слово "case" переводиться|перекладається,переказується| як "вибір", то це як би натяк на те, що можна цю структуру використовувати для реалізації простих меню.
###
# case-3: Реалізація меню за допомогою команди "case"
echo "Назвіть|накликайте| файл, а потім (через пропуск|прогалину|)
наберіть цифру, відповідну потрібною
обробці:
1 - відсортувати
2 - видати на екран
3 - визначити число рядків "
read x у|в,біля| # x - ім'я файлу, у|в,біля| - що зробити
case $y in
1) sort < $x ;;
2) cat < $x ;;
3) wc -l < $x ;;
*) echo "
Ми не знаємо
такої команди ! " ;;
esac
Зрозуміло, бажання|воління| можуть бути складніші і на місці окремих команд можуть бути послідовності команд або виклики складніших розрахунків.
Напишемо команду "case-4", яка додає|добавляє| інформацію до файлу, вказаного першим параметром (якщо параметр один), із стандартного входу, або (якщо 2 параметри) з|із| файлу, вказаного як перший параметр:
###
# case-4: Додавання|добавка| у файл.
# Використання стандартної змінної.
# "$#" - число параметрів при введенні розрахунку
# ">>" - перенаправлення з|із| додаванням|добавкою| у файл
case $# in
1) cat >> $1 ;;
2) cat >> $2 < $1 ;;
*) echo "Формат: case-4 [звідки] куди" ;;
esac
"$1" (при "$#=1") - це ім'я файлу, в який відбувається|походить| додавання|добавка| із стандартного входу.
"$1" і "$2" (при $#=2) - це імена файлів, з|із| якого ("$1") і в який ("$2") додавати|добавляти|.
У всіх інших випадках (*) видається повідомлення|сполучення| про те, яким повинен бути правильний формат команди.