- •Міністерство освіти і науки, молоді та спорту України
- •Жуковецька с.Л.
- •Операційна система unix Посібник до виконання лабораторних та самостійних робіт
- •Анотація
- •Порядок виконання роботи
- •Методичні вказівки
- •1 Реєстрація в системі
- •Лабораторна робота №2 Тема: «Керування повноваженнями на файли та каталоги»
- •Порядок виконання роботи
- •Методичні вказівки Хто такі власники файлів?
- •Зміна прав доступу до файлу
- •Числова нотація команди chmod
- •Символьна нотація команди chmod
- •Створення маски – umask
- •Лабораторна робота №3 Тема: «Архівація та пошук файлів. Використання зовнішніх носіїв»
- •Порядок виконання роботи
- •Методичні вказівки
- •Лабораторна робота №4 Тема: «Програмування на мові bash. Файли ініціалізації»
- •Порядок виконання роботи
- •Методичні вказівки
- •Порядок виконання роботи
- •Методичні вказівки
- •Лабораторна робота №6 Тема: «Програмування в bash. Основні прийоми написання команд»
- •Порядок виконання роботи
- •Методичні вказівки
- •Лабораторна робота №7 Тема: «Програмування в bash. Використання фільтрів»
- •Порядок виконання роботи
- •Методичні вказівки
- •Лабораторна робота №8 Тема: «Мережеві засоби unix»
- •Порядок виконання роботи
- •Методичні вказівки
- •Жуковецька с.Л.
- •Сіренко о.І.
- •Операційна система unix
- •Посібник до виконання лабораторних
- •Та самостійних робіт
- •65082, Одеса, вул. Дворянська, 1/3
Лабораторна робота №6 Тема: «Програмування в bash. Основні прийоми написання команд»
Мета
Оволодіння практичними навичками професійної роботи з командною оболонкою shell – використання основних керуючіх структур.
Завдання для самостійної підготовки
1. Вивчити:
використання позіційних змінних;
організацію командних файлів: передача параметрів, умовні розгалуження і цикли;
побудову програмних каналів.
2. Детально ознайомитись з довідкової системи man з такими
командами UNIX: set, unset, test, let, break, continue.
Порядок виконання роботи
По номеру варіанта вибрати завдання і відповідно до методичних вказівок, за матеріалами рекомендованої літератури і конспекту лекцій виконати завдання і оформити звіт по роботі.
Зміст звіту
Початкові дані і постановка задачі.
Текст програми.
Висновки.
Методичні вказівки
Аргументи командного рядка
Передача аргументів в програму відбувається таким чином:
<ім’я програми> [<арг.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 без виконання решти команд в циклі.
Завдання
Написати скрипт, що приймає три аргументи (а, b, с ) і виводить значення (a+b) /c
Написати скрипт, що приймає два числові аргументи і виводить найбільший з них. У випадку якщо аргументів більше 2 – вивести повідомлення про помилку.
Написати скрипт, що перевіряэ наявність файлу $HOME/.bashrc і виводить його на екран. В разі його відсутності вивести повідомлення про помилку.
Написати команду, яка виводить розширену інформацію про файл $HOME/.bashrc і в разі успішного виводу показує число рядків в цьому файлі.
Написати скрипт, що запрошує введення даних до тих пір, поки не буде введений рядок “quit”
Написати скрипт, який кожну хвилину записує у файл час і поточне число процесів в системі. При запуску скрипт повинен створювати файл в директорії /tmp і записувати в нього свій PID.
Написати скрипт, який управляє роботою скрипта із завдання №6. При виклику управляючого скрипта йому передається параметр start або stop. При здобутті параметра start управляючий скрипт по номеру процесу зупиняє керований процес і видаляє файл з номером процесу. При здобутті параметра start скрипт із завдання №6 повинен запуститься у фоновому режимі
Контрольні запитання
Яким чином в програму можна передати аргументи?
Як в програмі можна отримати доступ до аргументів, з якими визивалася програма?
Як можна вичисляти арифметичні операції в скриптах командного інтерпретатора?
Які спеціальні змінні можна використовувати в скриптах командного інтерпретатора?
Яким чином можна запускати програми в залежності від результату виконання інших програм?
