Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
63
Добавлен:
20.04.2015
Размер:
2 Mб
Скачать

If условие

then

команды 1

elif

команды 2

else

команды 3

fi

В условных конструкциях сценариев можно использовать конструкцию test. Он может быть записан в формате test выражение или [выражение]. Последнее является конструкцией, в которой записывается операция сравнения с использованием приведенных выше обозначений. Приведем пример использования test

Текст сценария scr7

РЕЗУЛЬТАТЫ и пояснения

#!/bin/bash

# 7

clear

echo

a=test

b=TEST

c=test

test $a = $b

echo " test 1 run cod " $?

test $a = $c

echo " test 2 run cod " $?

C1=234

C2=234

[ $C1 -eq $C2 ]

echo " test 3 eq " $?

[ $C1 = $C2 ]

echo " test 4 = " $?

let d=$C1

[ $d = 234 ]

echo " test 5 = " $?

[ $d -eq 234 ]

echo " test 6 eq " $?

echo press key

read q

Если сценарий вызвать следующим образом,

scr7

то получим следующие результаты.

test 1 run cod 1

test 2 run cod 0

test 3 eq 0

test 4 = 0

test 5 = 0

test 6 eq 0

press key

В языке сценариев оболочки используются операторы цикла. Они бывают трех типов. Первый из них записывается следующим образом:

whilе условие

do

команды

done

Пример записи оператора цикла в форме whilе для решения задачи вычисления факториала числа 5 может выглядеть так.

Текст сценария scr8

РЕЗУЛЬТАТЫ и пояснения

#!/bin/bash

let p=5

let i=1

let f=1

while [ $i -le $p ]

do

let f=f*i

let i=i+1

done

echo " $p $f"

echo

echo press key

read q

Если сценарий вызвать следующим образом,

scr8

то получим следующие результаты.

5 120

press key

Другая форма записи оператора цикла такая

until условие

do

команды

done

Приведем пример сценария, также реализующего задачу вычисления факториала с использованием until. Обращаем внимание на условие выполнения оператора цикла (-le) в первом случае и условия окончания (-gt) – во втором.

Текст сценария scr9

РЕЗУЛЬТАТЫ и пояснения

#!/bin/bash

let p=5

let i=1

let f=1

until [ $i -gt $p ]

do

let f=f*i

let i=i+1

done

echo " $p $f"

echo

echo press key

read q

Если сценарий вызвать следующим образом,

scr9

то получим следующие результаты.

5 120

press key

Последний вид оператора цикла имеет такой формат записи.

for var in список

do

команды

done

При такой записи оператора цикла переменная var последовательно приобретает значения из списка. Цикл выполняется столько раз, сколько элементов в списке. Вместо списка может быть записан шаблон имени файла. Тогда будут перебираться все файлы из текущего каталога, имя которых совпадает с шаблоном. Например, если после in записана *, то цикл выполнится столько раз, сколько файлов в текущем каталоге, а значения переменной var будет последовательно равно именам всех таких файлов

Приведем примеры сценариев с оператором for.

Текст сценария scr10

РЕЗУЛЬТАТЫ и пояснения

#!/bin/bash

clear

echo

echo

echo "= for 1 ="

let l=0

for x in p q r

do

let l=l+1

echo " $l $x"

done

echo

echo " = for 2 ="

echo

let l=1

for p in *

do

echo " $l $p"

l=l+1

done

echo

echo " = for 3 ="

echo

let l=1

for p in *

do

if [ -f $p ];

then

echo " $l $p"

let l=l+1

fi

done

echo press key

read q

Если сценарий вызвать следующим образом,

scr10

то получим следующие результаты.

= for 1 =

Список состоит из трех элементов и будет выполнен три раза. Параметр цикла х приобретет значения из этого списка.

1 p 2 q 3 r

= for 2 =

1 scr10

= for 3 =

2 scr10

press key

Следующая управляющая конструкция реализует структуру множественного выбора. Она записывается следующим образом

case слово in

шаблон 1)

команды

. . .

; ;

шаблон 2)

команды

. . .

; ;

*)

команды

. . .

; ;

esac

При совпадении значения слово с одним из шаблонов выполняются операторы до двойных символов «; ;». Далее сценарий продолжает выполнение со строки после ключевого слова esac.

Текст сценария scr11

РЕЗУЛЬТАТЫ и пояснения

#!/bin/bash

clear

echo

case $1 in

0) echo Null ;;

[1-9]) echo Anoder ;;

[a|A]) echo a or A ;;

*) echo NO !!! ;;

esac

echo press key

read q

Если сценарий вызвать следующим образом,

scr11 С

то получим следующие результаты, зависящий от введенного С

С => 0 Null

C 1 2...9 Anoter

C a (A) a or A

Другие случаи NO !!!

press key

Задание 39.

1. Создать командный файл, который при выполнении должен получить не менее двух параметров. Если количество переданных сценарию параметров ровно два, то на экране появляются их значения, в противном случае – вывести имя сценария и требование задать два параметра.

2. Создать сценарий, который проверяет наличие строки пользователя (имя пользователя вводится с клавиатуры – команда read) в файле /ets/passwrd.

3. Создать сценарий, в котором в специально созданную директорию /usr/temp (создать команду mkdir), копируется файл. Предварительно этот файл создается с клавиатуры командой cat. После создания директории высветить ее содержимое и сделать то же самое после копирования.

4. Создать командный файл, который считывает с клавиатуры имя файла и каталог, а затем копирует указанный файл в заданный каталог.

5. Создать сценарий, который спрашивает имя файла и определяет: имеется ли файл с таким именем в домашнем каталоге пользователя - /home/<имя пользователя>.

6. Создать командный файл, в котором над двумя заданными числами осуществляются следующие действия: эти числа складываются и перемножаются. Затем в цикле на экране распечатывается строки со словом Hello!. Количество строк равно минимальному из заданных чисел.

7. Создать командный файл, который по команде read запрашивает имя каталога и выдает его полное содержимое.

8. Создать командный файл, который по команде read запрашивает имя пользователя и выдает список, запущенных им процессов (вывести такие атрибуты процесса - PID, STAT, COMMAND, TIME, PRI, NI).

Соседние файлы в папке Операционные системы