Готовые отчеты / ОСиС. Лабораторная работа 3
.pdfФедеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники
ЛАБОРАТОРНАЯ РАБОТА №3 по дисциплине «Операционные системы и сети»
на тему «Программирование на Shell Linux»
Выполнил: студент 3-го курса дневного отделения группы ИКПИ-85
Коваленко Леонид Александрович Преподаватель:
доцент кафедры ПИиВТ Дагаев Александр Владимирович
Санкт-Петербург 2020
Цель работы
Ознакомиться с базовыми возможностями bash-скриптов. Постановка задачи
1.Написать простой скрипт для вывода текущей даты, числа папок и числа файлов в текущей директории и продемонстрировать его работу.
2.Написать скрипт для вычисления факториала вводимого числа и продемонстрировать его работу.
3.Написать скрипт для вычисления n-го числа Фибоначчи, где n — число, вводимое с клавиатуры и продемонстрировать его работу.
4.Написать скрипт для проверки вводимого числа на простоту и продемонстрировать его работу.
Ход работы
Работа выполняется в операционной системе Linux Debian.
Напишем простой скрипт (табл. 1) для вывода текущей даты, числа папок и числа файлов в текущей директории.
Таблица 1 — Скрипт для вывода даты, числа папок и числа файлов
#!/bin/bash
echo -n "Текущая дата: " && date +"%A, %X %x"
echo -n "Количество папок в текущей директории: " && ls -lhA | grep -xP "d.*" | wc -l
echo -n "Количество файлов в текущей директории: " && ls -lhA | grep -xP "\-.*" | wc -l
echo -n "Количество SH файлов в текущей директории: " && ls -lhA | grep -xP "\-.*\.sh" | wc -l
echo -n "Количество TXT файлов в текущей директории: " && ls -lhA | grep -xP "\-.*\.txt" | wc -l
Результат запуска приведен на рис. 1.
Рисунок 1 — Вывод даты, числа папок и числа файлов в текущей директории 2
Напишем скрипт (табл. 2) для вычисления факториала вводимого числа.
Таблица 2 — Скрипт для вычисления факториала вводимого числа
#!/bin/bash
# Вычисление факториала итеративно
echo -n "Вычисление факториала. Введите N (N>=0): " read n
s=1
for (( i = 1; i <= n; ++i )) do
s=$(($s * $i))
done
echo "Fact($n) = $s"
Результат запуска приведен на рис. 2.
Рисунок 2 — Вычисление факториала
Напишем скрипт (табл. 3) для вычисления n-го числа Фибоначчи, где n
— число, вводимое с клавиатуры.
Таблица 3 — Скрипт для вычисления n-го числа Фибоначчи
#!/bin/bash
# Вычисление n-го числа Фибоначчи
echo -n "Нахождение N-го числа Фибоначчи. Введите N (N>=0): " read n
a=0 b=1
for (( i = 1; i <= n; ++i )) do
b=$(($a+$b)) a=$(($b-$a))
done
echo "Fib($n) = $a"
3
Результат запуска приведен на рис. 3.
Рисунок 3 — Вычисление n-го числа Фибоначчи
Напишем скрипт (табл. 4) для проверки вводимого числа на простоту. Таблица 4 — Скрипт для проверки вводимого числа на простоту
#!/bin/bash
# Функция проверки числа на простоту function isPrime() {
local n=$1 # 1-й аргумент функции isPrime if [[ $n -lt 4 ]] # если n < 4
then
if [[ $n -gt 1 ]] # если n > 1 then
true # вызов функции true, без возврата из isPrime
else
false # вызов функции false, без возврата из isPrime
fi
else
# если n % 2 == 0 || n % 3 == 0
if [[ $(( $n % 2 )) -eq 0 ]] || [[ $(( $n % 3 )) -eq 0 ]] then
false # вызов функции false, без возврата из isPrime
else
sqrt_n=$(echo "scale=0;sqrt($n)" | bc -l) for (( i = 5; i <= sqrt_n; i += 6 )); do
# если n % i == 0 || n % (i + 2) == 0
if [[ $(( $n % $i )) -eq 0 ]] || [[ $(( $n % ($i + 2) )) -eq
0 ]]
then
false # вызов функции false, без возврата из isPrime return
fi
done
true # вызов функции true, без возврата из isPrime
fi
fi
}
echo -n "Проверка числа на простоту. Введите N (N>=1): "
4
read n
if isPrime $n; then
echo "Число простое"
else
echo "Число не простое"
fi
Результат запуска приведен на рис. 4.
Рисунок 4 — Проверка вводимого числа на простоту Заключение
В результате выполнения лабораторной работы мы ознакомились с базовыми возможностями bash-скриптов, рассмотрели конструкции if..else, for, read и механизм функций.
5