Файл: Лабораторная работа 2 по дисциплине Операционные системы.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.04.2024

Просмотров: 38

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Федеральное агентство связи РФ

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Сибирский государственный университет телекоммуникаций и информатики»

(СибГУТИ)
Лабораторная работа 2

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

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


Выполнил:




Группа:




Вариант:




Проверил:

Квиткова И.Г.



Новосибирск, 2020 г.

Задание 1

Написать 2 скрипта:

- add_phone, создающий список телефонных номеров и фамилии пользователей

Решение

#!/bin/bash

if [ ! $# == 2 ]; then

echo "Использование: $0 телефон фамилия"

exit

fi

echo "$1:$2" >> phonebook.dict
- search_phone, осуществляющий поиск телефонных номеров по фамилии или по шаблону.
#!/bin/bash

if [ ! $# == 1 ]; then

echo "Использование: $0 фамилия_или_шаблон"

exit

fi

if ! grep "$1" phonebook.dict; then

echo "Телефон не найден"

fi
Результат:


Задание 2

В качестве параметра скрипта указывается имя пользователя. Если пользователь с указанным именем существует, вывести информацию о том, работает ли он в данный момент в системе; иначе – вывести сообщение «Нет такого пользователя» (список пользователей, зарегистрированных в системе, находится в файле /etc/passwd).
Решение

#!/bin/bash

if [ ! $# == 1 ]; then

echo "Использование: $0 пользователь"

exit

fi

if [ "$(cut -f1 -d":" /etc/passwd | grep $1)" ]

then

last -p now $1

else

echo "Нет такого пользователя"

fi

Результат:



Задание 3

Параметры скрипта – список имен пользователей. Вывести число сеансов тех из них, кто сейчас в сети (информацию о сеансах выдает команда last).
Решение

#!/bin/bash


for login in "$@"

do

sess=`who | grep $login | wc -l`

if [ "$sess" -gt 0 ]

then

count=`last -p now $login | wc -l`

count=$(($count-2))

echo "$login - $count"

fi

done

Результат:



Задание 4

Написать скрипт, проверяющий наличие в домашней директории файла profile. Если этот файл отсутствует, то скопировать его из директории /etc.
Решение

#!/bin/bash

if [ ! -f /profile ]; then

cp /etc/profile /

fi
Результат:


Задание 5

Написать скрипт, проверяющий тип файла. Если файл – каталог, то вывести его содержимое, иначе - вывести сообщение о типе файла.
Решение

#!/bin/bash

if [ ! $# == 1 ]; then

echo "Использование: $0 имя_файла_или_каталога"

exit

fi
if [ -d $1 ]; then

ls -l $1

else

file -i $1

fi
Результат:



Задание 6

Написать скрипт, в котором создать каталог save, переписать в него содержимое текущего каталога рекурсивно т.е. с поддиректориями и установить на директорию все права для всех.
Решение

#!/bin/bash

mkdir save

find . -maxdepth 1 -name "*" -not -path "." -not -path "./save" -not -path "$0" -exec cp -R {} save/ \;

chmod -R 777 save
Результат:


Задание 7

Создать в текущем каталоге и в поддиректориях файлы нулевой длины (пустые файлы). Написать скрипт, удаляющий рекурсивно файлы нулевой длины.
Решение

#!/bin/bash

find . -size 0 -exec rm {} \;

Результат:


Задание 8

Написать скрипт, в котором в качестве параметров командной строки заданы имена файлов. Если задан один файл, то подсчитать число букв в этом файле; если задано два файла – подсчитать число слов; если задано три файла – подсчитать число строк; иначе вывести сообщение об ошибке.
Решение

#!/bin/bash

case $# in

1)

wc -m $1

;;

2)

wc -w $1 $2

;;

3)

wc -l $1 $2 $3

;;

*)


echo "Укажите от одного до трёх файлов"

;;

Esac
Результат:


Задание 9

Написать скрипт, проверяющий тип файла; если файл текстовый, то загрузить редактор vi, если исполняемый, то выполнить его.
Решение

#!/bin/bash

if [ ! $# == 1 ]; then

echo "Использование: $0 имя_файла"

exit

fi
type=$(file -i "$1")
if [ -x $1 ]

then

command=`readlink -f $1`

eval $command

elif echo "$type" | egrep -q 'text'

then

vi $1

fi
Результат:


Задание 10

Написать скрипт, реализующий электронный журнал преподавателя с возможностью записи студента и его оценок (3 оценки), а также вывода базы по студентам с оценками, и осуществляющий подсчет среднего балла для каждого студента.
Решение

#!/bin/bash

if [ ! $# == 0 ]

then

if [ ! $# == 4 ]

then

echo "Использование: $0 ФИО оценка оценка оценка"

exit

fi

echo "$1:$2:$3:$4" >> journal.txt

exit

fi

while read LINE

do

name=`echo $LINE | cut -f1 -d":"`

a=`echo $LINE | cut -f2 -d":"`

b=`echo $LINE | cut -f3 -d":"`

c=`echo $LINE | cut -f4 -d":"`

avg=$((($a+$b+$c)/3))

echo "$name, оценки $a, $b, $c, средняя - $avg"

done < journal.txt
Результат: