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

LR OC / вар 26 / lr_4

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

Министерство образования Российской Федерации.

Московский государственный институт электроники и математики

(технический университет)

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

Лабораторная работа № 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.

Выполнение работы: вар 2

c-41-26$ cat > prog04.sh

#!/bin/sh

echo "Ukazhite direktoriu"

read m

cd $m

echo "Stroki Slova Simvoli Imya Fail"

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

c-41-26$ sh prog04.sh

Ukazhite direktoriu

/home/student/c-41/c-41-26

Stroki Slova Simvoli Imya Fail

4 16 115 bd.txt

4 7 53 bd1.txt

6 19 147 prog04.sh

3 15 91 prog2.c

3 13 103 prog4.sh

23 46 224 prog44.sh

Вар 1

c-41-26$ cat > prog4.sh

#!/bin/sh

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

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

c-41-26$ cat prog4.sh

#!/bin/sh

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

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

c-41-26$ sh prog4.sh

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

4 16 115 bd.txt

4 7 53 bd1.txt

3 15 91 prog2.c

3 13 103 prog4.sh

Вар 6

#!/bin/sh

cd ./

for i in *

do

if [ -d $i ]

then

echo $i "-folder,"

else

echo $i "-file,"

fi

if [ -r $i ]

then

echo " readable,"

else

echo " non-readable,"

fi

if [ -w $i ]

then

echo "writable."

else

echo " non-writable."

fi

done

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