Смекни!
smekni.com

Складання сценаріїв в операційній системі LINUX (стр. 2 из 2)

if <вираз 1>

then <оператори 1>

elif <вираз 2>

then <оператори 2>

else <оператори 3>

fi

7 Оператор-перемикач

Існує спеціальний оператор, який зручно використовувати при великій кількості розгалужень. Оформити такий запис дозволяє оператор case, формат якого такий:

case var in

S1) <оператори 1>;;

S2) <оператори 2>;;

S3) < оператори 3>;;

*) <оператори 4>;;

esac

В залежності від того, чи збігається значення змінної var із значенням S1, S2 або S3, виконуються відповідно <оператори 1>, <оператори 2> або <оператори 3>. Якщо вказаного збігу немає, тоді виконуються <оператори 4>.

8 Оператор циклу for

Оператор for має декілька форматів. Найпростіший формат цього оператор циклу, який використовує одновимірний список, має такий вигляд:

for var in list

do

<оператори>

done

В даному випадку <оператори> виконуються по одному разу для кожного значення змінної var із списку list. Приклад сценарію для знаходження суми елементів одновимірного масиву:

#! /bin/bash

mas=’3 7 12 5 8’

sum=0

for var in $mas

do

let sum=$sum + $var

done

echo “result is $sum”

Формат циклу for з використанням масивів дуже схожий на відповідний формат циклу в мові Сі.

Приклад сценарію з використанням циклу for для знаходження максимального значення серед елементів одновимірного масиву:

#! /bin/bash

mas [0] =3

mas [1] =7

mas [2] =12

mas [3] =5

mas [4] =8

max=mas [0]

for((i=0; i<5; i++))

do

if [$m ax –lt ${mas [i] }]

then let max=${mas [i] }

fi

done

echo “result is $max”

9 Оператори циклу while та until

Оператор циклу while можна використовувати для повторного виконання <операторів> до тих пір, поки заданий <вираз> буде залишатись істинним:

while <вираз>

do

<оператори>

done

Можливо, що цикл не буде виконано жодного разу, якщо заданий <вираз> виявиться хибним з самого початку.

Приклад сценарію з використанням циклу for для знаходження максимального значення серед елементів двовимірного масиву, який вводиться із клавіатури:

#! /bin/bash

for((i=0; i<5; i++))

do

for((j=0; j<5; j++))

do

read mas [i] [j]

done

done

max=mas [0]

for((i=0; i<5; i++))

do

for((j=0; j<5; j++))

do

if [$max –lt ${mas [i] [j] }]

then let max=${mas [i] [j] }

fi

done

done

echo “result is $max”

Оператор циклу until можна використовувати для повторного виконання <операторів> до тих пір, поки заданий <вираз> буде залишатись хибним:

until <вираз>

do

<оператори>

done

10 Функції

Як і в мовах високого рівня, окремі частини сценаріїв можна записувати у вигляді функцій. Формат визначення функції такий:

func() {

<оператори>

}

Виклик функції, якій передаються параметри param1, param2, param3:

func param1 param2 param3

Можна також передати параметри у вигляді одного рядка, наприклад, $@. Функція може інтерпретувати параметри за тими же принципами, за якими виконується інтерпретація позиційних параметрів, що передаються сценарію оболонки. Наприклад, для обчислення виразу

можна використати дві функції:

#! /bin/ bash

a = 9

b = 5

c = 7

d = 2

calc1() {

let y= ($a+$b) /$1

echo “Result is $y”

}

calc2() {

let y = ($a+$b) *$1

echo “Result is $y”

}

echo “input x”

read x

if [$x - eq 5]

then calc1 c

else calc2 d

fi

11 Робота з файлами

Використовуючи файлові операції порівняння, можна із заданого списка імен знаходити файли або каталоги, а також визначати їх права доступу. Наприклад:

#! /bin/ bash

if [- d name1]

then echo “ name1 is directory”

el if [- f name2]

then echo “ name2 is file”

else echo “ name1 and name2 is not directory or file”

fi

if [- w name2]

then echo “ file has write permission”

else echo “ file has not write permission”

fi

В системних сценаріях Linux часто зустрічаються випадки, коли потрібно виконати задану послідовність операцій в залежності від інформації, яка записана у відповідних файлах. Складемо сценарій, в результаті виконання якого на екрані з’являється вікно системної програми годинника або калькулятора, якщо у файлі /home/user/Select. txt змінній Program присвоєно значення відповідно “XCLOCK” або “XCALC”. Звертаємо увагу, що цей сценарій може бути виконано лише в графічній оболонці X (детальніше графічний режим Linux розглядається в наступній лабораторній роботі).

#! /bin/ bash

. /home/user/Select. txt

if [“$Program” = “XCLOCK”]

then exec xclock &

elif [“$Program” =“XCALC”]

then exec xcalc &

fi