Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LR OC / Вар 15 / lab4

.doc
Скачиваний:
3
Добавлен:
30.04.2013
Размер:
56.32 Кб
Скачать

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

Кафедра кибернетики

Лабораторная работа №4

по дисциплине

«Операционные системы»

на тему: «Командные файлы»

Выполнил студент группы С-41

Лукинов Н.А.

Проверил

Гостев И.М.

Москва 2010

Файл начала сеанса (login - файл)

Независимо от версии Shell при входе в систему UNIX ищет

файл начала сеанса с предопределенным именем, чтобы выпол-

нить его как командный файл;

- для UNIX версии 7 это: .profile;

- для C-Shell это: .login и/или .cshrc.

В этот файл обычно помещают команды:

- установки характеристик терминала;

- оповещения типа who, date;

- установки каталогов поиска команд (обычно: /bin, /usr/bin);

- смена подсказки с $ на другой символ и т.д.

Процедура языка Shell

Это командный файл. Два способа его вызова на выполнение:

1. $ sh dothat (где dothat - некоторый командный файл);

2. $ chmod 755 dothat (сделать его выполнимым, т.е.

-rwxr-xr-x)

$ dothat.

Следует знать порядок поиска каталогов команд (по умолча-

нию):

- текущий;

- системный /bin;

- системный /usr/bin.

Следовательно, если имя вашего командного файла дублирует

имя команды в системных каталогах, последняя станет недос-

тупной (если только не набирать ее полного имени).

Переменные Shell

В языке Shell версии 7 определение переменной содержит

имя и значение: var = value.

Доступ к переменной - по имени со знаком $ спереди:

fruit = apple (определение);

echo $fruit (доступ);

apple (результат echo).

Таким образом, переменная - это строка. Возможна конкате-

кация строк:

$ fruit = apple

$ fruit = pine$fruit

$ echo $fruit

pineapple

$ fruite = apple

$ wine = ${fruite}jack

$ echo $wine

applejack

$

Другие способы установки значения переменной - ввод из

файла или вывод из команды (см. раздел 7.6), а также присва-

ивание значений переменной - параметру цикла for из списка

значений, заданного явно или по умолчанию (см. раздел 7.9).

Переменная может быть:

1) Частью полного имени файла: $d/filename, где $d - пе-

ременная (например, d = /usr/bin).

2) Частью команды:

$ S = "sort + 2n + 1 - 2" (наличие пробелов требует кавы-

чек "")

$ $S tennis/lpr

$ $S basketball/lpr

$ $S pingpong/lpr

$

Однако внутри значения для команды не могут быть символы

|, >, <, & (обозначающие канал, перенаправления и фоновый

режим).

Условный оператор if

Используем имена переменных, представляющие значения па-

раметров процедуры:

sort +1 -2 $1 | tr ... | lpr

Пример неверного вызова:

makelist (без параметров), где $1 неопределен.

Исправить ошибку можно, проверяя количество аргументов -

значение переменной $# посредством if - оператора.

Пример: (измененной процедуры makelist):

if test $# -eq 0

then echo "You must give a filename"

exit 1

else sort +1 -2 $1 | tr ... | lpr

fi

Здесь test и exit - команды проверки (см. раздел 7.11) и

выхода.

Таким образом, синтаксис оператора if:

if <если эта команда выполняется успешно, то>;

then <выполнить все следующие команды до else или, если

его нет, до fi>;

[else <иначе выполнить следующие команды до fi>]

Ключевые слова if, then, else и fi пишутся с начала строки.

Успешное выполнение процедуры означает, что она возвраща-

ет значение true = 0 (zero) (неуспех - возвращаемое значение

не равно 0).

Оператор exit 1 задает возвращаемое значение 1 для неу-

дачного выполнения makelist и завершает процедуру.

Возможны вложенные if. Для else if есть сокращение elif,

которое одновременно сокращает fi.

1. Основной командный файл

c-41-15$ cat > lab4.sh (Создание основного командного файла)

#!/bin/sh

cd /home/student/c-41/c-41-15/lab1/ (Переход в директорию с первым локальным командным файлом)

sh lab41.sh (Запуск первого локального командного файла)

cd /home/student/c-41/c-41-15/ (Переход в директорию с вторым локальным командным файлом)

sh lab42.sh (Запуск второго локального командного файла)

2. Первый локальный файл

c-41-15$ cat > lab41.sh (Создание первого локального командного файла)

#!/bin/sh

echo "Директория"

pwd (Вывод директории в которой находиться файл)

echo " Строки Слова Символы Имя файла"

wc *|awk '{if (($4!="total")&&($1!="0")) {print $0}}'

(Фильтр команды wc, для вывода информации только о файлах, с проверкой столбца строк, а также общего количества)

3. Второй локальный файл

c-41-15$ cat > lab42.sh (Создание второго локального командного файла)

#!/bin/sh

echo "Директория"

pwd (Вывод директории в которой находиться файл)

echo " Строки Слова Символы Имя файла"

wc *|awk '{if (($4!="total")&&($1!="0")) {print $0}}'

(Фильтр команды wc, для вывода информации только о файлах, с проверкой столбца строк, а также общего количества)

4. Запуск основного командного файла

c-41-15$ sh lab4.sh

Директория

/home/student/c-41/c-41-15/lab1 (Вывод директории в котором

Он находится)

Строки Слова Символы Имя файла

6 17 128 lab41.sh

4 98 4710 prog4

6 10 58 prog4.c

Директория

/home/student/c-41/c-41-15

Строки Слова Символы Имя файла

5 21 149 bd.txt

3 15 108 ed.hup

7 9 103 lab4.sh

6 17 128 lab42.sh

3 9 78 new.sh

1 1 10 new2.sh

5 22 162 pr.sh

7 10 73 prog.c

4 103 4742 prog2

6 13 87 prog2.c

4 98 4718 prog3

6 10 63 prog3.c

4 111 4746 prog4

6 11 90 prog4.c

6 10 88 prog5.c

7 13 76 summ.sh

3 3 22 term.sh

Соседние файлы в папке Вар 15