Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unix_лаб_методичка_укр.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
585.22 Кб
Скачать

Лабораторна робота №6 Тема: «Програмування в bash. Основні прийоми написання команд»

Мета

Оволодіння практичними навичками професійної роботи з командною оболонкою shell – використання основних керуючіх структур.

Завдання для самостійної підготовки

1. Вивчити:

  • використання позіційних змінних;

  • організацію командних файлів: передача параметрів, умовні розгалуження і цикли;

  • побудову програмних каналів.

2. Детально ознайомитись з довідкової системи man з такими

командами UNIX: set, unset, test, let, break, continue.

Порядок виконання роботи

По номеру варіанта вибрати завдання і відповідно до методичних вказівок, за матеріалами рекомендованої літератури і конспекту лекцій виконати завдання і оформити звіт по роботі.

Зміст звіту

  1. Початкові дані і постановка задачі.

  2. Текст програми.

  3. Висновки.

Методичні вказівки

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

Передача аргументів в програму відбувається таким чином:

<ім’я програми> [<арг.1> <арг.2>…]

Усередині програми доступ до аргументів здійснюється за допомогою спеціальних змінних, званих позиційними

$<n> , n – номер позицій парам.

$1 - перший

$2 - другий

Є ще додаткові можливості підстановки.

$0 ім’я сценарію

$* всі аргументи одним рядком

$@ всі аргументи окремо

$# кількість аргументів

$$ ідентифікаційний номер поточного процесу

$! ідентифікаційний номер фонового завдання

$? ідентифікаційний номер виконуваної команди

Команди shift і set

shift – здвигає номери аргументів

echo “$0 has $# arguments”

shift

echo “$0 has $# arguments”

set – встановлює позиційні параметри

Імена (ідентифікатори) позиційних параметрів складаються з однієї або більш за цифри (тільки не з одиночного нуля). Значеннями позиційних параметрів є аргументи, які були задані при запуску оболонки (перший аргумент є значенням позиційного параметра 1, і т. д.). Змінити значення позиційного параметра можна за допомогою вбудованої команди set

Т.ч. позиційні параметри можуть бути не обов'язково аргументи, а виведення будь-якої команди.

Приклад:

echo “$1 $2 $3”

set `uname -a`

echo “$1 $2 $3”

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

Команди:

let

$(( ))

expr

let <вираз>

Обчислює арифметичні вирази, вираз порівняння.

Наприклад:

let 2*7 # видає значення одразу

let a=11 # Те ж саме , що і 'a=11'

let a=a+5 # Еквівалентно "a = a + 5"

let "a /= 4" # Еквівалентно let "a = a / 4"

let "a -= 5" #Еквівалентно let "a = a - 5"

let "a %= 8" # Еквівалентно let "a = a % 8"

expr

Універсальний обробник виразів: обчислює заданий вираз (аргументи повинні відділятися пропусками). Вирази можуть бути арифметичними, логічними або рядковими.

expr 3 + 5 # поверне 8

expr 5 % 3 # поверне 2

expr 5 \* 3 # поверне 15

У арифметичних виразах, оператор множення обов'язково повинен екрануватися зворотним слешем.

A=`expr \(5 + 3 \) / 3 # (5+3) /3

y=`expr $y + 1`

Операція інкремента змінною, те ж саме, що і

let y=y+1, или y=$(( $y+1 )).

$(( ... ))

У арифметичних підстановках, зворотні одиночні лапки можуть бути замінені на подвійні круглі дужки $((...)) або дуже зручною конструкцією, із застосуванням пропозиції let.

z=$(($z+3))

z=$((z+3)) # Також вірно.

Усередині подвійних круглих дужок, змінні разименовиваются автоматично.

Команда перевірки виконання умови test

[ ]

test <вираз>

< вираз > - <значення> <опції> <значення>

Команда test виконує перевірку на істинність якої небуть – умови і повертає значення 0, якщо вираз істинний, і 1 інакше. Вираз передається програмі test як аргумент. Замість того, щоб писати

test expression

можна укласти вираз в квадратні дужки:

[ expression ]

Опції:

-d file Вірно, якщо file існує і являється каталогом.

-e file Вірно, якщо файл з ім'ям file існує.

-f file Вірно, якщо файл з ім'ям file існує і є звичайним файлом.

-s file Вірно, якщо файл з ім'ям file існує і його розмір більше

нуля.

-r|w|x file Вірно, якщо файл з ім'ям file існує і для нього

встановлено право r|w|x .

-d|h|c|b Вірно, якщо file існує і є спеціальним файлом

відповідного типу

(каталог|симв.силка|симв.пристрій|блочний пристрій)

Таблиця 9 – Значення аргументів команди test

Для числових

Для рядкових

Для логічних

-gt >

-z пусто

-a ^

-lt <

-n довжина рядка

-o ۷

-ge >=

= рівність рядків

! ¬

-le < =

! = нерівність

-ne ≠

-eq

рівність

Можна використовувати в операторові if

if [ expression]

then

else

fi

Управляючі структури

1. Умовний запуск команд

<команда 1> && <команда 2>

команда 2 працює тільки у випадку успішного завершення команда1

<команда 1> || <команда 2>

команда 2 Працює тілько у випадку неуспішного завершення

команда 1

2. Умовний вираз

if <умова>

then <команди>

С ветвлением:

if <умова>

then <команди>

elif <умова>

then <команди>

………

else <команди>

fi

Приклад

#!/bin/bash

ARGS=2

if [ $# -ne "$ARGS" ] # Перевірка кількості вхідних аргументів.

then

echo "Порядок використанняя: `basename $0` filename column-

number"

exit $E_WRONGARGS

fi

3. Цикл по лічильникам

Оператор for працює небагато не так, як в звичних мовах програмування. Замість того, щоб організовувати збільшення або зменшення на одиницю значення деякої змінної при кожному проході циклу, він при кожному проході циклу присвоює змінній чергове значення із заданого списку слів

for var in <список>

do

<команди>

done

Приклад. Слідуючий скрипт створює файли foo_1, foo_2 и foo_3:

for a in 1 2 3 ; do

touch foo_$a

done

Приклад

for a in `ls -l`; do

echo $a

done

4. Цикл з предумовою

while [ умова ];

do

<команди>

done

Приклад:

i=1

while [ $i –le 10 ]; do

echo $i;

let i=$i+1

done

while [ “$i” != “a” ]

do

read i;

done

5. Цикл зпісляумовою

until [ умова ]

do

<команди>

done

Приклад:

i=1

repeat [ $i –ge 10 ]; do

echo $i;

let i=$i+1

done

6. Оператор вибору

Умова не перевіряється. Перевіряється відповідність рядка до шаблону

Case <слово> in

Шаблон 1)

<команди>

; ;

Шаблон 2)

<команди>

; ;

..

*)

<команди>

; ;

esac

Приклад

read a

case $a in

yes|true) echo “1”

;;

no|false) echo “0”

;;

*) echo “-1”

;;

esac

7. Додатково

Команда break дозволяє виконати безумовний вихід з циклу.

break [n] – вихід з n вкладених циклів

continue

Команда continue приведе до того, що програма негайно перейде до наступної ітерації циклу while або for без виконання решти команд в циклі.

Завдання

  1. Написати скрипт, що приймає три аргументи (а, b, с ) і виводить значення (a+b) /c

  2. Написати скрипт, що приймає два числові аргументи і виводить найбільший з них. У випадку якщо аргументів більше 2 – вивести повідомлення про помилку.

  3. Написати скрипт, що перевіряэ наявність файлу $HOME/.bashrc і виводить його на екран. В разі його відсутності вивести повідомлення про помилку.

  4. Написати команду, яка виводить розширену інформацію про файл $HOME/.bashrc і в разі успішного виводу показує число рядків в цьому файлі.

  5. Написати скрипт, що запрошує введення даних до тих пір, поки не буде введений рядок “quit”

  6. Написати скрипт, який кожну хвилину записує у файл час і поточне число процесів в системі. При запуску скрипт повинен створювати файл в директорії /tmp і записувати в нього свій PID.

  7. Написати скрипт, який управляє роботою скрипта із завдання №6. При виклику управляючого скрипта йому передається параметр start або stop. При здобутті параметра start управляючий скрипт по номеру процесу зупиняє керований процес і видаляє файл з номером процесу. При здобутті параметра start скрипт із завдання №6 повинен запуститься у фоновому режимі

Контрольні запитання

  1. Яким чином в програму можна передати аргументи?

  2. Як в програмі можна отримати доступ до аргументів, з якими визивалася програма?

  3. Як можна вичисляти арифметичні операції в скриптах командного інтерпретатора?

  4. Які спеціальні змінні можна використовувати в скриптах командного інтерпретатора?

  5. Яким чином можна запускати програми в залежності від результату виконання інших програм?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]