Забродин УНИХ основы командного интерфейса 2010
.pdfdate
#Вывод на экран полного маршрутного имени текущего каталога
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