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

If условие

then

список команд

fi

В общем случае оператор if имеет структуру:

If условие

then

список команд 1

elif условие

then список команд 2

elif ...

...

else

список команд N

fi

elif сокращенный вариант от else if.

Если выполняется условие, т.е. условие истинно, то выполняется список команд, иначе он пропускается. Обратите внимание, что структура обязательно завершается служебным словом fi.

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

Командный файл del:

#! /bin/sh

if [ -d $1 ] (проверяем: значение параметра является каталогом?)

then

echo "Это каталог. Удалить с файлами (Y)/ Не удалять (N)"

read a

if [ $a = "y" ]

then

rm -r - f $1 (-f удаляет файлы без предупреждения)

fi

else

echo "Это файл. Удалить (Y)/ Не удалять (N)"

read a

if [ $a = "y" ]

then

rm $1

fi

fi

В данном командном файле сначала идет проверка, является ли введенное через параметр имя, каталогом. Если да, то пользователь решает удалять или не удалять этот каталог. Введенное пользователем значение записывается в переменную а, затем осуществляется проверка, если значение а = «у», то производится удаление каталога.

В противном случае (если введено имя файла) пользователь получает уведомление о том, что это файл, и сообщает удалять его или нет. Если значение а = «у», то производится удаление файла.

Создадим командный файл, который выдает на экран справку о числе файлов, созданных указанным пользователем (через параметр). Предусмотреть возможность удаления этих файлов после выдачи сообщения пользователю.

Командный файлdelusrfile:

#! /bin/sh

find /home -type f -user $1 > ~/findlist (поиск файлов, созданных указанным пользователем, запись списка файлов в findlist)

echo количество файлов, созданных пользователем $1:

wc -l ~/findlist (подсчет кол-ва строк в файле findlist)

echo удалить эти файлы? (y - да , n - нет)

read a

if [ $a = "y" ]

then

cat ~/findlist | xargs -e rm

fi

(считываются строки из findlist и передаются команде xargs, назначение которой строить и выполнять команду, поступившую на вход. Ключ -е позволяет считывать не весь файл целиком, а построчно. Таким образом, строка, содержащая полное имя файла, считывается из findlist и передается команде rm, удаляющей этот файл).

Оператор выбора case

Оператор выбора имеет структуру:

case строка-образец in

строка-шаблон) список команд;;

строка-шаблон) список команд;;

...

esac

Строка-образец (это может быть и один символ) сравнивается со строкой-шаблоном. Если строка-образец совпадает со строкой-шаблоном, то выполняется соответствующий список команд (если команды записываются в одну строку, то ";" будет использоваться как разделитель команд).

Обычно последняя строка выбора имеет шаблон "*", что в структуре "case" означает "любое значение". Эта строка выбирается, если не произошло совпадение значения переменной (строки-образца) ни с одним из ранее записанных шаблонов.

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

echo "Введите имя файла: "

read x

echo " Выберите какую операцию выполнить с файлом:

1 - отсортировать

2 - выдать на экран

3 - определить число строк "

read y

case $y in

1) sort < $x ;;

2) cat < $x ;;

3) wc -l < $x ;;

*) echo " Ошибка. Нет такой команды" ;;

esac

Задание: Создайте меню, в котором пользователю предлагается создать, копировать, удалить, переместить, переименовать указанный файл. Все данные, необходимые для выполнения этих команд, вводятся пользователем с клавиатуры.

Оператор цикла while (с истинным условием)

Структура цикла while предпочтительнее тогда, когда неизвестен заранее точный список значений параметров или этот список должен быть получен в результате вычислений в цикле.

while условие

do

список команд

done

Список команд в теле цикла повторяется до тех пор, пока сохраняется истинность условия или цикл не будет прерван изнутри специальными командами ("break", "continue" или "exit"). При первом входе в цикл условие должно выполняться.

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