Программирование командных файлов (в оболочке Shell)
Командный файл - текстовый файл с правами на запуск.
В командном файле можно записать последовательность команд на исполнение.
Кроме этого можно написать не большой скрипт.
Некоторые возможности по написанию скрипта:
Условный оператор "IF"
Оператор вызова ("CASE")
Оператор цикла с перечислением ("FOR")
Оператор цикла с истинным условием ("WHILE")
Оператор цикла с ложным условием ("UNTIL")
Можно писать свои функции.
В каждой операционной системе есть более мощный скриптовый язык, основным для UNIX является PERL (хотя есть и другие, JScript, PHP и Python).
# Это комментарий.
## И это.
### И это тоже.
Команда test проверяет выполнение некоторого условия. С использованием этой (встроенной) команды формируются операторы выбора и цикла языка shell.
Два возможных формата команды:
test условие
или
[ условие ]
В shell используются условия различных "типов".
УСЛОВИЯ ПРОВЕРКИ ФАЙЛОВ:
-f file | файл "file" является обычным файлом; |
-d file | файл "file" - каталог; |
-с file | файл "file" - специальный файл; |
-r file | имеется разрешение на чтение файла "file"; |
-w file | имеется разрешение на запись в файл "file"; |
-s file | файл "file" не пустой. |
Примеры. Вводя с клавиатуры командные строки в первом случае получим подтверждение (код завершения "0"), а во втором - опровержение (код завершения "1"). "specific" - имя существующего файла.
[ -f specific ] ; echo $?
[ -d specific ] ; echo $?
УСЛОВИЯ ПРОВЕРКИ СТРОК:
str1 = str2 | строки "str1" и "str2" совпадают; |
str1 != str2 | строки "str1" и "str2" не совпадают; |
-n str1 | строка "str1" существует (непустая); |
-z str1 | строка "str1" не существует (пустая). |
Примеры.
x="who is who"; export x; [ "who is who" = "$x" ]; echo $?
x=abc ; export x ; [ abc = "$x" ] ; echo $?
x=abc ; export x ; [ -n "$x" ] ; echo $?
x="" ; export x ; [ -n "$x" ] ; echo $?
Задание 1:
Запустите Linux.
Составьте справочник для выше приведенных команд (на русском языке), расписав какие параметры для чего нужны.
Поработайте с этими командами.
Напишите программу на Shell для резервирования каталога (каким архиватором, какой каталог и куда спросите у преподавателя).
Сделайте автоматический запуск этого скрипта (в /etc/crontab), для создания ежедневной, еженедельной и ежемесячной копии.
Задание 2
###
# if-3: Оценка достижений
echo -n " А какую оценку получил на экзамене?: "
read z
if [ $z = 5 ]
then echo Молодец !
elif [ $z = 4 ]
then echo Все равно молодец !
elif [ $z = 3 ]
then echo Все равно !
elif [ $z = 2 ]
then echo Все !
else echo !
fi
Задание 3.
###
# case-1: Структура "case".
# Уже рассматривавшийся в связи со
# структурой "if" пример проще и
# нагляднее можно реализовать с
# помощью структуры "case".
echo -n " А какую оценку получил на экзамене?: "
read z
case $z in
5) echo Молодец ! ;;
4) echo Все равно молодец ! ;;
3) echo Все равно ! ;;
2) echo Все ! ;;
*) echo ! ;;
esac
Задание 4.
###
# holding: Справочник.
# Для различных фирм по имени выдается
# название холдинга, в который она входит
for i
do
case $i in
ONE|TWO|THREE) echo Холдинг: ZERO ;;
MMM|WWW) echo Холдинг: Not-Net ;;
Hi|Hello|Howdoing) echo Холдинг: Привет! ;;
*) echo Нет такой фирмы ;;
esac
done
Задание 5.
###
# print-50: Структура "while"
# Расчет позволяет напечатать 50
# экземпляров файла "file-22"
n=0
while [ $n -lt 50 ] # пока n < 50
do
n=`expr $n + 1`
cat file-22 > /dev/lp
done
Задание 6.
###
# specific: Специальные параметры (переменные)
echo $0 - имя расчета
echo $? - код завершения
echo $$ - идентификатор последнего процесса
echo $! - идентификатор последнего фонового процесса
echo
echo $* - значения параметров, как строки
echo $@ - значения параметров, как слов
echo
set -au
echo $- - режимы работы интерпретатора
Контрольные вопросы:
1.Дайте определение команде test?
2. Принципы обработки прерывания Trap?
3. Операторы условий?
Содержание отчета:
1. Цель работы.
2.Ответы на контрольные вопросы.
3.Распечатка хода работы в электронном виде.
Практическая работа № 15