Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Аргументи командного рядка



Аналогічно тому, як це робиться в командах UNIX, в скриптах можна використовувати аргументи. Аргументи вводяться при виклику командного файла після його імені і нумеруються, починаючи з 1. Перший аргумент програми, що оброблюється, позначається $1, другий - $2, і т.ін. Аргумент $0 - це ім'я програми, що виконується на даний момент (назва оболонки, або командного файлу) - фактично перше слово в командному рядку. Аргументи можуть розглядатися як локальні змінні процесу. Існують і інші спеціальні змінні, пов'язані з характеристиками командного рядка і процесу (див. Додаток Г).

6.1.14 Арифметичні операції

В оболонці bash присутня команда let, яка дозволяє виконувати операції з арифметичними величинами. За допомогою цієї команди можна порівнювати числа і виконувати з ними такі операції, як додавання або множення. Команда let може замінюватися подвійними круглими дужками. Оператори let, що співпадають зі спеціальними символами оболонки, брати в лапки не потрібно. Якщо операнди арифметичного виразу розділені пропусками, цей вираз слід взяти в лапки. Наприклад:

$ let "res = 2 * 7"

$ echo $res

$

6.1.15 Команда порівняння test

Часто буває необхідно виконати перевірку, в ході якої порівнюються дві величини або перевіряється наявність того або іншого файлу. За допомогою команди test можна порівнювати цілі числа, рядки, і виконувати логічні операції. Результат перевірки - це код завершення операції test, який, як було сказано раніше, зберігається в спеціальній змінній $?. Замість ключового слова test можна використовувати квадратні дужки. Наприклад:

$ greeting="hallo"

$ num=5

$ test $num -eq 5; echo $?

$ [ $greeting = "hallo" ]; echo $?

$ test -f main.c; echo $?

В даному прикладі ми ініціалізуємо дві змінні. Потім виконуємо перевірки на рівність їх тому або іншому значенню (зверніть увагу, що рядки порівнюються за допомогою оператора =, а численні значення - за допомогою опції -eq). Остання перевірка - це перевірка наявності файлу main.c в поточному каталозі. Результат – неправда (файл не знайдено). Операції команди test наведені у Додатку Д.

Умови

В оболонці bash є набір умовних керуючих структур, які забезпечують умовне розгалуження програм. Багато з цих структур аналогічні умовним керуючим структурам мов програмування, але є деяка різниця.

Конструкція if ставить умову для виконання команди. Цією умовою є код завершення якоїсь конкретної команди. Якщо команда виконана успішно (код завершення дорівнює нулю), то команди всередині структури if виконуються. В іншому випадку виконується гілка else (якщо вона присутня) або керування передається наступному за if-конструкцією оператору. Керуюча структура if повинна закриватися ключовим словом fi (if навпаки). Синтаксис if-конструкції такий:

if <команда-умова>

then

<команди>

else

<команди>

fi

В якості команди-умови як правило використовується команда test або її альтернативна форма - квадратні дужки [].

Вкладення умов if здійснюється за допомогою структури elif. Вкладеність elif не обмежується. Остання гілка каскаду elif повинна починатися зі слова else:

if <команда-умова>

then

<команди>

elif

<команди>

else

<команди>

fi

Керуюча структура case забезпечує вибір одного з кількох можливих варіантів. Вибір здійснюється шляхом порівняння заданого в структурі значення з кількома можливими зразками. Кожне можливе значення змінної, що перевіряється (зразок) пов'язується з сукупністю операцій. Кожен зразок являє собою регулярний вираз, що завершується круглою дужкою. Список команд, що виконуються завершується двома крапками з комами, що стоять на окремому рядку. Вся конструкція завершується ключовим словом esac (case навпаки). Синтаксис структури:

case <рядок> in

зразок)

команди

;;

зразок)

команди

;;

*)

команди по замовчуванню

;;

esac

Зразок може містити спеціальні символи: *, [],?, |. Варіант по замовчуванню включати до структури не обов'язково.

Цикли

Командний інтерпретатор дозволяє створювати гнучкі циклічні структури. Конструкція while забезпечує виконання окремої команди, доки виконується умова (код виконання команди-умови дорівнює нулю). Замикає конструкцію ключове слово done:

while <команда-умова>

do

команди

done

Як і в if-структурі, команда-умова частіше всього представляється перевіркою test (або квадратними дужками).

Цикл until аналогічний циклу while. Він відрізняється тим, що команди тіла циклу виконуються до того часу, доки умова залишається НЕ виконаною.

until <команда-умова>

do

команди

done

Структура for-in призначена для послідовного звернення до значень, перерахованих у списку. В ній два операнди - змінна і список значень. Кожне зі значень по черзі присвоюється змінній структури. Цикл завершується, коли всі значення зі списку будуть вичерпані. Тіло циклу поміщується в операторні дужки do-done, синтаксис конструкції for-in:

for <змінна> in <список_значень>

do

команди

done

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

6.1.18 Приклади скриптів

Розглянемо простий інтерактивний скрипт whoareyou. Нижче наводиться його текст:

echo What is your name? (1)

read reply (2)

case $reply in (3)

root) (4)

echo You are system administrator of $HOSTNAME (5)

;; (6)

stud) (7)

echo You are a student (8)

;; (9)

*) (10)

echo You are a mortal user on $HOSTNAME (11)

;; (12)

esac (13)

Скрипт пропонує користувачеві відрекомендуватися (рядок 1). Користувач вводить своє ім'я, яке заноситься в змінну reply. Далі відбувається розгалуження в залежності від значення reply (іншими словами, в залежності від відповіді користувача). Скрипт друкує одне з трьох повідомлень. При друку використовується значення іншої змінної - HOSTNAME. Вона визначається безпосередньо системою і містить мережеве ім'я UNIX-машини, на котрій виконується скрипт.

Розглянемо інший приклад. Іноді, при великій кількості файлів, буває важко за ними услідити. Наведена нижче програма chkown дозволяє знаходити файли, які не належать користувачеві.

for filename in `ls` (1)

do (2)

if [! -O $filename ]; then (3)

echo $filename does not belong to `whoami` (4)

fi (5)

if [ -d $filename -a -x $filename ]; then (6)

echo Entering $filename... (7)

cd $filename (8)

$0 (9)

Echo Leaving $filename... (10)

cd.. (11)

fi (12)

done (13)

Розглянемо дію скрипта порядково.

В першому рядку ініціалізується for-цикл. Змінною циклу є filename. Список значень визначається результатом роботи команди ls (вона поміщена в зворотні лапки). Іншими словами, змінна filename по черзі приймає значення імен файлів і каталогів поточної директорії.

В рядку 3 відбувається перевірка, чи належить файл або каталог користувачеві, який запустив скрипт (операція -O команди test). Зауважимо, що якщо ключове слово then стоїть на тому ж рядку, що і умова, воно повинно відокремлюватися крапкою з комою (;). Якщо користувач не є хазяїном файлу (знак оклику - логічне заперечення), то друкується повідомлення (рядок 4). При виконанні рядка 4 замість `whoami` в команду echo підставляється ім'я користувача (зворотні лапки).

В рядку 6 відбувається подвійна перевірка: чи є значення змінної filename каталогом (операція -d), і чи є значення змінної filename файлом, виконавчим для користувача (-x). Обидва логічних результата перемножуються (операція -a відповідає логічному "І") і, згідно кінцевому результату, гілка then виконується або не виконується. Як відомо, права на виконання каталогу визначають можливість користувача увійти в нього (cd).

Якщо змінна filename дійсно містить ім'я доступного каталогу, скрипт входить в нього (рядок 8) і рекурсивно запускає самого себе уже в цьому каталозі (в рядку 9 змінна $0 відповідає імені виконавчої програми, тобто імені скрипта). Після завершення роботи цього другого скрипта, керування повертається в первинний процес, відбувається перехід в початковий каталог (рядок 11), і на цьому гілка then завершується.

Необхідно відзначити, що якщо шлях до даного скрипта не буде визначено в змінній PATH, то його виконання буде перерване вже на другому рівні, оскільки програма вже покине початковий каталог (каталог першого рівня), в якому знаходиться файл chkown. Команда в рядку 9 не містить абсолютного імені файлу, тому скрипт звернеться до змінної PATH і почне його пошук у всіх визначених там каталогах.





Дата публикования: 2015-04-06; Прочитано: 466 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...