Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Готовые отчеты / ОСиС. Лабораторная работа 3

.pdf
Скачиваний:
12
Добавлен:
21.11.2020
Размер:
632.98 Кб
Скачать

Федеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники

ЛАБОРАТОРНАЯ РАБОТА №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