Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСИ_Ведерников.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
259 Кб
Скачать
☆

Лабораторная работа №8. Настройка оболочки

Цель: ознакомится со специальными параметрами и условными операторами.

1. Проанализируйте файл labs/back.sh

sh -c "while true; do sleep 10; done" &

echo $!

2. В подкаталоге bin создайте файл case.sh:

case $1 in

start) if [ -f /tmp/back$UID.pid ] ;

then echo Alredy started

else /bin/back.sh >/tmp/back$UID.pid; \

echo Started: ‘cat /tmp/back$UID.pid‘

fi ;;

stop) if [ -f /tmp/back$UID.pid ] ; then \

kill -kill ‘cat /tmp/back$UID.pid‘ && echo Killed

rm /tmp/back$UID.pid

else echo Not started

fi ;;

status) [ -f /tmp/back$UID.pid ] \

&& echo Running: ‘cat /tmp/back$UID.pid‘ \ || echo Not running ;;

*) echo "usage: case.sh

{start|stop|status}"

esac

  1. Выполните команду export UID

sergey@sergey-VirtualBox:~$ export UID

  1. Запуск сценарий без аргументов и последовательно с аргументами status, start, status, start, stop, status, stop. Результат сохраняется в файле отчета.

sergey@sergey-VirtualBox:~/bin$ case.sh status >>lab8.txt

sergey@sergey-VirtualBox:~/bin$ case.sh start >>lab8.txt

sergey@sergey-VirtualBox:~/bin$ case.sh status >>lab8.txt

sergey@sergey-VirtualBox:~/bin$ case.sh start >>lab8.txt

sergey@sergey-VirtualBox:~/bin$ case.sh stop >>lab8.txt

sergey@sergey-VirtualBox:~/bin$ case.sh status >>lab8.txt

sergey@sergey-VirtualBox:~/bin$ case.sh stop >>lab8.txt

usage: case.sh

{start|stop|status} – вывелось в терминале

Not running

Started: ‘cat /tmp/back1000.pid‘

Running: ‘cat /tmp/back1000.pid‘

Alredy started - вывелось в файл отчёта

Killed

Not running

Not started

5. В подкаталоге bin создаём файл calc.sh:

res=$1

shift

while [[ $# -ge 2 ]] ; do

res=$(($res$1$2))

shift 2

done

echo $res

sergey@sergey-VirtualBox:~$ chmod +x bin/calc.sh

6. Запуск сценария следующими командами:

a) sergey@sergey-VirtualBox:~$ calc.sh 1 + 2 \* 3 + 3 / 4

3

b) sergey@sergey-VirtualBox:~$ calc.sh 1 + 2 \* 3

9

c) sergey@sergey-VirtualBox:~$ calc.sh 1 + 2\*3

7

d) sergey@sergey-VirtualBox:~$ calc.sh 1+2

1+2

7. Различия результатов в случаях b) и c):

Результаты различны из-за пробела после числа 2, стоящего в случае b).

8. Правка сценария так, чтобы в случае d) он выдавал результат 3.

res=$1

shift

while [[ $# -ge 2 ]] ; do

res=$(($res$1$2))

shift 2

done

if [ $# -lt 2 ]; then

res=$(($res))

fi

echo $res

sergey@sergey-VirtualBox:~$ calc.sh 1+2

3

9. Сценарий summ.sh выводящий сумму своих аргументов если первый аргумент +, произведение если первый аргумент и сообщение Usage: summ.sh +|* arguments ... в противном случае.

if [ $1 = "+" ]

then

echo $[$2+$3+$4]

elif [ $1 = "\\*" ]

then

echo $[$2*$3*$4]

fi

Лабораторная работа № 9. Базовые регулярные выражения. Редактор sed.

Цель: ознакомиться с базовыми, регулярными и расширенными регулярными выражениями редактора sed. Использование утилиты grep. Применение потокового редактора sed.

  1. Скопируйте в домашний каталог файл /home/labs/text.txt

sergey@sergey-VirtualBox:~$ cp labs/text.txt text.txt

2. Выведите в файл отчета все строки файла text.txt содержащие слово "Благозвон". До­бавьте к файлу отчета количество найденных строк.

sergey@sergey-VirtualBox:~$ grep –e Благозвон text.txt >>lab9.txt| grep –c –e Благозвон text.txt >>lab9.txt

3. Добавьте к файлу отчета все строки файла text.txt, которые начинаются с буквы "Б" (возможно после нескольких пробелов).

sergey@sergey-VirtualBox:~$ grep –e ^\s*Б text.txt >>lab9.txt

4. Добавьте к файлу отчета все непустые строки файла text.txt, не содержащие русскую букву "а" (в любом регистре).

sergey@sergey-VirtualBox:~$ grep -v -i a text.txt>>lab9.txt

  1. Добавьте в файл отчета имена файлов каталога /home/labs, которые содержат слово "include".

sergey@sergey-VirtualBox:~$ find /home/labs -name include -type f>>lab9.txt

6. Используя редактор sed замените в файле text.txt все слова Снарк на СНАРК. Результат сохраните в файле snark.txt.

sergey@sergey-VirtualBox:~$ sed -e s/Снарк/СНАРК/g text.txt > snark.txt

7. При помощи sed выведите из файла /etc/passwd идентификаторы пользователей и их имена, разделенные символом табуляции

sergey@sergey-VirtualBox:~$ cat /etc/passwd | sed s/:x:/" "/ | sed s/:[0-9]*.*// |sed s/.*/\&\ \$/ | sed s/"[a-z]*"// | sed s/"[0-9]*$"// | sort -g>>lab9.txt

Вывелось:

0 root

1 daemon

2 bin

3 sys

4 sync

…

1000 user

8. Составьте алгоритм для sed, который будет менять местами каждые два слова файла.

файл sed.sh:

#!/bin/sed –nf

h

n

G

p

Запускаем sed.sh:

sergey@sergey-VirtualBox:~$ sed -f bin/sed.sh

9. Сценарий для редактора sed, который добавляет:

  1. В начало файла строку "<html><body>".

  2. В начало всех строк начинающихся словом "Приступ" строку "<H2>", а в конец строку "</H2>".

  3. В конец всех остальных строк "<br>".

  4. К концу последней строки "</body></html>"

Сценарий sed:

s/.*/&<br>/

1 s/^/<html><body>\n/

$ s/$/\n<\body><\html>/

s/^Приступ.*/<H2>&<\H2>/

s/<\/br><\H2>/<\H2>/

sergey@sergey-VirtualBox:~$ sed -f bin/sed1.sh bin/pr.html