Файл: Лабораторная работа 2 по дисциплине Операционные системы.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.04.2024
Просмотров: 38
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Федеральное агентство связи РФ
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Сибирский государственный университет телекоммуникаций и информатики»
(СибГУТИ)
Лабораторная работа 2
по дисциплине:
«Операционные системы»
Федеральное агентство связи РФ
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Сибирский государственный университет телекоммуникаций и информатики»
(СибГУТИ)
Лабораторная работа 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
Результат: