Интересная задача на Bash
Я новичок в изучении Linux, а также в Bash. Задача:
создается директория в формате YYYY-MM-DD в которой создаются 100 файлов с последовательным именем. в каждый файл заполняется одной строкой со случайной цифрой длинной в 4 знака.
посчитать сумму первых 50 цифр из первой половины, так же и 2й половины. Сравнить какая сумма больше
найти файл в котором содержится самая большая цифра и самая маленькая из всех 100 файлов с указанием имени файла и самой цифры
конечный результат сохраняется в файл в имени которого дата формата YYYY-MM-DD.result
упаковать ВСЕ файлы включая скрипт в PREFIX.DATE.tar.gz
все файлы после выполнения в указанной директории должны быть удалены по выходу из программы.
при запуске файла программа должна требовать PREFIX для тар файла иначе заканчиват свое выполнение
N.B. используем case для того чтобы каждую операцию можно было сделать по отдельности, предусмотрев пункт где все делается за один проход.
рекомендую использовать function для часто используемых подпрограмм. комментарии обязательны.
На данный момент сделано следующее: Выполнена 1 часть задания, с помощью скрипта создаются файлы внутри которых сгенерированы 4-х значные числа, также создается еще один файл под названием s в который складываются все сгенерированные числа из файлов.
Из 2 задания получилось сложить числа из файла s и сохранить результат в файл f.
Как сделать то что необходимо во второй части зания не пойму, если есть возможность подскажите что нужно использовать для этого, а также как действовать дальше.
Ответы (1 шт):
Решать задачу за Вас я не буду, подскажу только как сделать выбор требуемого действия и как использовать для этого функции.
Требуемое действие задаётся параметром командной строки при запуске скрипта. Это дожен быть единственный параметр. Если он отсутствует, выполняются все действия, если параметров более одного - это ошибка.
В моей заготовки реализованы действия 1 и 3. Остальное - Вам.
#! /bin/bash
if [ "$#" -gt "1" ]
then
echo "Неверное использование команды"
echo "Вызов должен выглядеть так:"
echo "$0 [Код действия]"
echo "Если код действия не задан, выполняются все действия"
fi
ACTION=0
if [ "$#" -eq "1" ]
then
ACTION=$1
fi
function find_min {
# Ищем минимальное значение
min=9999
name="File1"
for i in {1..100}
do
value=`cat File$i`
if [ "$value" -lt "$min" ]
then
min=$value
name="File$i"
fi
done
echo "Минимальное значение $min найдено в файле $name"
}
function find_max {
# Ищем максимальное значение
max=0
name="File1"
for i in {1..100}
do
value=`cat File$i`
if [ "$value" -gt "$max" ]
then
max=$value
name="File$i"
fi
done
echo "Максимальное значение $max найдено в файле $name"
}
function Action_1 {
echo "создается директория в формате YYYY-MM-DD"
D=`date +%F`
mkdir $D
cd $D
echo "в которой создаются 100 файлов с последовательным именем. в каждый файл заполняется одной строкой со случайной цифрой длинной в 4 знака."
for i in {1..100}
do
R=$(head -1 /dev/urandom | od -N 1 | awk '{ print $2 }')
let "rnum = $RANDOM % 9000 + 1000"
echo $rnum > File$i
done
cd ..
}
function Action_2 {
echo "посчитать сумму первых 50 цифр из первой половины, так же и 2й половины. Сравнить какая сумма больше"
}
function Action_3 {
echo "найти файл в котором содержится самая большая цифра и самая маленькая из всех 100 файлов с указанием имени файла и самой цифры"
D=`date +%F`
cd $D
find_min
find_max
}
function Action_4 {
echo "конечный результат сохраняется в файл в имени которого дата формата YYYY-MM-DD.result"
}
function Action_5 {
echo "упаковать ВСЕ файлы включая скрипт в PREFIX.DATE.tar.gz"
}
function Action_6 {
echo "все файлы после выполнения в указанной директории должны быть удалены по выходу из программы."
}
function Action_7 {
echo "при запуске файла программа должна требовать PREFIX для тар файла иначе заканчиват свое выполнение"
}
case $ACTION in #Выполняем заданное действие
"0")
# Выполняем разом все действия
Action_1
Action_2
Action_3
Action_4
Action_5
Action_6
Action_7
;;
"1")
Action_1
;;
"2")
Action_2
;;
"3")
Action_3
;;
"4")
Action_4
;;
"5")
Action_5
;;
"6")
Action_6
;;
"7")
Action_7
;;
esac
И огромная просьба: никогда не вставляйте в вопрос скриншоты Ваших исходных текстов и сообщений об ошибка. Это доставляет огромные неудобства тем, кто пытается дать ответ.

