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

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

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

Зміст звіту

  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 існує і є спеціальним файлом

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

пристрій)

Для числових

Для рядкових

Для логічних

-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. Яким чином в програму можна передати аргументи ?

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

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

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

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

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

Лабораторна робота №7

Тема: «Програмування в bash.

Використання фільтрів»

Мета

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

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

1. Вивчити:

  • використання фільтрів;

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

  • використання файлів обліку користувачів;

  • поняття регулярного виразу.

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

командами UNIX: cat, more, less, head, tail, wc, grep, sort, diff, uniq, cut, paste, join, tr.

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