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

Забродин УНИХ основы командного интерфейса 2010

.pdf
Скачиваний:
159
Добавлен:
16.08.2013
Размер:
1.33 Mб
Скачать

date

#Вывод на экран полного маршрутного имени текущего каталога

pwd

#Вывод на экран полного маршрутного имени домашнего каталога пользователя

echo $HOME

#Вывод на экран регистрационного имени пользователя who am i

#Вывод на экран собственного имени процедуры echo $0

#Конец процедуры proc1.1

Пример выполнения процедуры proc1.1: $proc1.1

/home/user1/posobie

/home/user1

 

user1 pts/1

2009-02-05 10:19

proc1.1

 

2. Написать процедуру, выводящую на экран все переданные процедуре параметры: текущую дату и время, полное маршрутное имя текущего каталога, полное маршрутное имя домашнего каталога пользователя, регистрационное имя пользователя, собственное имя процедуры, количество переданных в процедуру параметров.

Решение. С помощью одной команды echo можно вывести на экран значения позиционных параметров, передаваемых в процедуру при ее вызове. В качестве параметров в процедуру передаются результаты выполнения соответствующих команд

UNIX.

#proc1.2

#Вывод на экран значений первого, второго, третьего и четвертого позиционных параметров, переданных процедуре при обращении, а также #нулевого параметра, содержащего имя выполняемой процедуры

121

echo $1 $2 $3 $4 $0

#Конец процедуры proc1.2

Пример выполнения процедуры proc1.2:

#proc1.2 `date` ` pwd` $HOME ` who am i`

/home/user1/posobie user1 pts/1 2007-02-05 proc1.2

10.2.РАБОТА С ФАЙЛАМИ

1.Написать процедуру, выводящую на экран содержимое файла, имя которого передается в процедуру в качестве параметра.

Решение:

#proc2.1

#Вывод на экран cодержимого файла $1 cat $1

#Конец процедуры proc2.1

Пример выполнения процедуры proc2.1: $proc2.1 file1.1

#

pwd

#

echo $HOME

#

who am i

#

echo $0 #proc1.1

2. Написать процедуру, копирующую содержимое первого файла во второй файл. Имена файлов передаются в процедуру в качестве параметров.

Решение:

#proc2.2

#Копирование содержимого файла $1

#в файл $2 cp $1 $2

122

#Конец процедуры proc2.2

Пример выполнения процедуры proc2.2: $proc2.2 file1.1 file1.2

3. Написать процедуру, записывающую в некоторый файл текст, вводимый с клавиатуры при работе процедуры. Имя файла передается в процедуру в качестве параметра. В конце текста должна быть текущая дата.

Решение:

#proc2.3

echo Введите текст read $TEMP1

echo $TEMP1 >$1 date >TEMP2

cat $1 TEMP2 >TEMP1 mv TEMP1 $1

#Конец процедуры proc2.3

Пример выполнения процедуры proc2.3: $proc2.3 fff

Введите текст

this text is test <ENTER> $cat fff

this text is test

Сбт Фев 24 17:10:36 MSK 2009

4. Написать процедуру, вводящую в начало файла_1 некоторый текст с клавиатуры, затем присоединяющего содержимое файла_2, затем снова вводящего текст с клавиатуры в конец файла_1. Имена файлов передаются в процедуру в качестве параметров.

Решение:

#proc2.4

cat - $1 >TEMP1 cat TEMP1 $2 >$1

#

123

Пример выполнения процедуры proc2.4: $cat fff

$proc2.4 fff ffff $cat ffff

5. Написать процедуру, меняющую взаимно содержимое двух файлов. Имена файлов передаются в процедуру в качестве параметров.

Решение: $proc2.5

cp $1 TEMP1 mv $1 $2

mv TEMP1 $2

#Конец процедуры proc2.5

Пример выполнения процедуры proc2.5: $cat file1

111111111111111111111 $cat file2

222222222222222222222 $proc2.5 file1 file2

$cat file1

222222222222222222222 $cat file2

111111111111111111111

10.3.РАБОТА С СИМВОЛЬНЫМИ СТРОКАМИ

1.Написать процедуру, вводящую в начало существующего файла_1 некоторый текст_1 с клавиатуры, затем присоединяющую к нему содержимое файла_2, затем присоединяющую в конец файла_1 введенный с клавиатуры текст_2. Имена файлов передаются в процедуру в качестве параметров.

Решение:

#proc3.1

#Ввод с клавиатуры текста_1 в промежуточный #файл file cat >file

124

#Присоединение содержимого файла $2 к промежуточному файлу и запись результата в файл TEMP

cat file $1 $2 > TEMP

#Присоединение в конец файла $1 текста_2, введенного с клавиатуры

cat TEMP - >>$1

#Конец процедуры Proc3.1

Пример выполнения процедуры proc3.1: $cat f1

111111111111 $cat f2

222222222222 $proc3.1 f1 f2

+++++++++ <ctrl+d>

----------------------<ctrl+d> $cat f1

+++++++++

111111111111

222222222222

----------------------

$

2. Написать процедуру, находящую в файле, имя которого передается в качестве параметра, все строки, содержащие вводимую с клавиатуры во время работы процедуры последовательность символов.

Решение:

#proc3.2

#Ввод с клавиатуры заданной последовательности #символов и запись ее в переменную A

read A

#Поиск в заданном файле всех строк, содержащих #заданную последовательность

grep $A $1

#Конец процедуры Proc3.2

Пример выполнения процедуры proc3.2: $cat f1

1234567890

0987654321

qwe456rtyu

asd34567fg

456456456

125

$proc3.2 f1

1234567890

qwe456rtyu

asd34567fg

456456456

3. Написать процедуру, помещающую в заданный первым параметром файл отсортированные по алфавиту строки с информацией о работающих в системе пользователях.

Решение:

#proc3.3

who | sort > $1

#Конец процедуры Proc3.3

Пример выполнения процедуры proc3.3:

$proc3.3 testing

 

$cat testing

 

user1

:0

2007-02-25 15:57 (console)

user1

pts/0

2007-02-25 15:57

user1

pts/1

2007-02-25 16:06

$

 

 

4. Написать процедуру, распределяющую строки заданного первым параметром символьного файла поровну между двумя другими файлами, имена которых передаются в качестве второго и третьего параметров.

Решение:

#proc3.4

#Определение числа строк в исходном файле wc –l $1 >TEMP

L1=`cut -f1 -d' ' TEMP`

#Определение числа строк в файле $2

L2=`expr $L1 / 2`

#Определение числа строк в файле $3

L3=`expr $L1 – $L2`

#Запись в файл $2 первой половины файла $1 head -$L2 $1 >$2

#Запись в файл $3 второй половины файла $1 tail -$L3 $1 >$3

#Конец процедуры Proc3.4

126

Пример выполнения процедуры proc3.4: $cat f1

1

2

3

4

5

6

$proc3.4 f1 f2 f3 $cat f2

1

2

3

$cat f3

4

5

6

$

10.4. ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ

1. Написать процедуру, вводящую с клавиатуры два целых числа и выводящую на экран их сумму, произведение и частное от деления первого числа на второе.

Решение:

#proc4.1

#Ввод с клавиатуры двух целых чисел и присваивание их переменным A и B.

read A B

#Вычисление суммы введенных чисел и присваивание ее переменной SUM

SUM=`expr $A + $B`

#Вычисление произведения введенных чисел и присваивание результата переменной PROD

PROD=`expr $A \* $B`

#Вычисление частного от деления первого введенного числа на второе и присваивание результата переменной QUOT

127

QUOT =`expr $A \/ $B`

#Вывод на экран полученных результатов echo Сумма введенных чисел равна echo $SUM

echo Произведение введенных чисел равно echo $PROD

echo Частное от деления первого числа на второе равно echo $QUOT

#Конец процедуры Proc4.1

Пример выполнения процедуры proc4.1: $proc4.1

4 5 <enter>

Сумма введенных чисел равна

9

Произведение введенных чисел равно

45

Частное от деления первого числа на второе равно

0

$

2. Написать процедуру, выводящую на экран время в минутах, остающееся до назначенного срока от момента запуска процедуры на исполнение. Назначенный срок задается в виде: номер дня в году (первый параметр), час (второй параметр ), минута (третий параметр).

Решение:

#proc4.2

#Сохранение в файле file текущей даты date +%j%H%M >file

#Сохранение в переменной TEMP1 текущего дня

TEMP1=`cut -f1 file`

#Сохранение в переменной TEMP2 текущего часа

TEMP2=`cut -f1 file`

#Сохранение в переменной TEMP3 текущей минуты

TEMP3=`cut -f2 file`

#Сохранение в переменной TEMP4 оставшихся суток

TEMP4=`expr $1 - $TEMP1`

128

TEMP4=`expr $TEMP4 \* 60 \* 24`

#Сохранение в переменной TEMP5 оставшихся часов

TEMP5=`expr $2 - $TEMP2` TEMP5=`expr $TEMP5 \* 24`

#Сохранение в переменной TEMP6 оставшихся минут

TEMP6=`expr $3 - $TEMP3`

#Вывод на экран результата

echo До назначенного срока остается

echo `expr $TEMP4 + $TEMP5 + $TEMP6` минут

#Конец процедуры Proc4.2

Пример выполнения процедуры proc4.2: $proc4.2 2010 066 11 35

До назначенного срока остается

4293 минут

10.5.ИСПОЛЬЗОВАНИЕ КОНВЕЙЕРОВ

1.Написать процедуру, которая вставляет в заданный первым параметром файл вводимую при работе процедуры новую строку после строки, номер которой задается вторым параметром.

Решение: proc5.1

#Ввод новой строки и запись ее в переменную #TEMP read TEMP

#Запись в файл file первых $2 строк файла $1 head -$2 $1 >file1

#Запись в файл file2 содержимого TEMP echo $TEMP > file2

#Присоединение в конец файла file1 новой строки из файла file2 cat file1 file2 >file3

#Определение общего числа строк в исходном файле $1

L1=`wc –l $1`

L1=`echo $L1 |cut -f1 -d" "`

#Определение числа строк во второй части файла $1

L2=`expr $L1 - $2`

#Запись в файл file2 второй части исходного файла tail -$L2 $1 > file2

#Объединение первой и второй частей результирующего файла cat file1 file2 >$1

#Конец процедуры Proc5.1

129

Пример выполнения процедуры proc5.1: $cat filen

111111111111111111111

2222222222222

3333333333333333333

4444444444444444444 $proc5.1 filen 2

===========================

$cat filen

111111111111111111111

2222222222222

===========================

3333333333333333333

4444444444444444444

2. Написать процедуру, которая всем пользователям, работающим в данный момент в системе, посылает сообщение из заданного первым параметром файла.

Решение:

#proc5.2

mail `who |cut -f1 -d” “` <$1

#Конец процедуры Proc5.2

Пример выполнения процедуры proc5.2: $proc5.2 testing

$

10.6.ВЕТВЛЕНИЕ В ПРОЦЕДУРАХ

1.Написать процедуру, которая выводит на экран постранично содержимое одного из двух символьных файлов, имена которых передаются процедуре в качестве параметров. Выбрать файл с меньшим числом строк (код завершения 000). Если заданные файлы имеют одинаковое число строк, то вывести на экран cодержимое обоих файлов (код завершения 111).

Решение:

#proc6.1

#Запись в переменную TEMP1 числа строк в файле $1 TEMP1=`wc –l $1 | cut -f1 -d “ “`

#Запись в переменную TEMP2 числа строк в файле $2

130