<Попередній | зміст | Наступна>
Змінні та константи
Проте з нашим сценарієм є проблема. Зверніть увагу, як повторюється рядок «Звіт про систему»? З нашим крихітним сценарієм це не проблема, але давайте уявімо, що наш сценарій був дійсно довгим і ми мали кілька екземплярів цього рядка. Якби ми хотіли змінити назву на щось інше, нам довелося б змінити її в кількох місцях, що могло б бути великою роботою. Що якби ми могли організувати сценарій так, щоб рядок з’являвся лише один раз, а не кілька разів? Це значно полегшить подальше обслуговування сценарію. Ось як ми можемо це зробити:
#! / бін / баш
# Програма для виведення сторінки системної інформації
title="Звіт про системну інформацію"
луна"
$title
$title
"
#! / бін / баш
# Програма для виведення сторінки системної інформації
title="Звіт про системну інформацію"
луна"
$title
$title
"
Створюючи а змінна названий назву і призначивши йому значення “System Information Report”, ми можемо скористатися перевагами розширення параметрів і розмістити рядок у кількох місцях.
Отже, як ми створюємо змінну? Просто, ми просто використовуємо його. Коли оболонка зустрічає змінну, вона автоматично створює її. Це відрізняється від багатьох мов програмування, в яких змінні мають бути явно оголошений або визначені перед використанням. Оболонка дуже слабка щодо цього, що може призвести до деяких проблем. Наприклад, розглянемо цей сценарій, який відтворюється в командному рядку:
[me@linuxbox ~]$ foo="так" [me@linuxbox ~]$ echo $foo так
[me@linuxbox ~]$ луна $дурка
[me@linuxbox ~]$
[me@linuxbox ~]$ foo="так" [me@linuxbox ~]$ echo $foo так
[me@linuxbox ~]$ луна $дурка
[me@linuxbox ~]$
Спочатку ми присвоюємо змінній значення «так». Foo, а потім відобразіть його значення за допомогою нудьгувати. Далі ми відображаємо значення імені змінної з помилкою «fool» і отримуємо порожній результат. Це тому, що оболонка щасливо створила змінну задурювати коли він зіткнувся з ним, і надав йому значення за замовчуванням нічого, або пусте. З цього ми дізнаємося, що ми повинні уважно стежити за своїм правописом! Також важливо зрозуміти, що насправді сталося в цьому прикладі. З нашого попереднього погляду на те, як оболонка виконує розширення, ми знаємо, що команда:
[me@linuxbox ~]$ echo $foo
[me@linuxbox ~]$ echo $foo
зазнає розширення параметрів і призводить до:
[me@linuxbox ~]$ echo так
[me@linuxbox ~]$ echo так
Тоді як команда:
[me@linuxbox ~]$ echo $fool
[me@linuxbox ~]$ echo $fool
розширюється на:
[me@linuxbox ~]$ echo
[me@linuxbox ~]$ echo
Порожня змінна розгортається в ніщо! Це може зіграти хаос з командами, які вимагають аргументів. Ось приклад:
[me@linuxbox ~]$ foo=foo.txt [me@linuxbox ~]$ foo1=foo1.txt [me@linuxbox ~]$ cp $foo $дурень
cp: відсутній операнд файлу призначення після `foo.txt'
[me@linuxbox ~]$ foo=foo.txt [me@linuxbox ~]$ foo1=foo1.txt [me@linuxbox ~]$ cp $foo $дурень
cp: відсутній операнд файлу призначення після `foo.txt'
Спробуйте `cp --help' для отримання додаткової інформації.
Спробуйте `cp --help' для отримання додаткової інформації.
Ми призначаємо значення двом змінним, Foo та foo1. Потім виконуємо а cp, але неправильно введіть назву другого аргументу. Після розширення, cp команді надсилається лише один аргумент, хоча для неї потрібні два.
Існують деякі правила щодо імен змінних:
1. Назви змінних можуть складатися з буквено-цифрових символів (букв і цифр) і символів підкреслення.
2. Першим символом імені змінної має бути літера або символ підкреслення.
3. Пробіли та знаки пунктуації не допускаються.
Слово «змінна» означає значення, яке змінюється, і в багатьох програмах змінні використовуються таким чином. Однак змінна в нашій програмі, назву, використовується як a постійна. Константа схожа на змінну тим, що має ім’я та містить значення. Відмінність полягає в тому, що значення константи не змінюється. У програмі, яка виконує геометричні обчислення, ми можемо визначити PI як константу і призначте їй значення 3.1415, замість того, щоб використовувати число буквально в нашій програмі. Оболонка не робить відмінності між змінними та константами; в основному вони призначені для зручності програміста. Загальноприйнятою конвенцією є використання великих літер для позначення констант і малих літер для істинних змінних. Ми змінимо наш сценарій, щоб він відповідав цій конвенції:
#! / бін / баш
# Програма для виведення сторінки системної інформації TITLE="Інформаційний звіт про систему Для $HOSTNAME"луна"
$TITLE
$TITLE
"
#! / бін / баш
# Програма для виведення сторінки системної інформації TITLE="Інформаційний звіт про систему Для $HOSTNAME"луна"
$TITLE
$TITLE
"
Ми також скористалися можливістю покращити нашу назву, додавши значення змінної оболонки
ІМ'Я ХОСТУ. Це мережева назва машини.
примітки: Оболонка насправді забезпечує спосіб забезпечити незмінність констант за допомогою використання декларувати вбудована команда з -r (лише читання). Якби ми призначили TITLE сюди:
declare -r TITLE="Назва сторінки"
оболонка запобігає будь-якому подальшому присвоєнню до TITLE. Ця функція рідко використовується, але вона існує для дуже формальних сценаріїв.