почему не работает case в bash
Необходимо используя case иметь возможность вызывать (выполнять) каждую операцию в отдельности, а также выполнить весь код в за один раз.
Вот код:
#!/bin/bash
printf "введит что хотите выполнить: "
read
case $Nomer in #Выполняем заданное действие
"0")
# Выполняем разом все действия
nomer_1
nomer_2
nomer_3
;;
#выполняется каждое действие поотдельности
"1")
nomer_1
;;
"2")
nomer_2
;;
"3")
nomer_3
;;
#esac
function nomer_1 {
for i in {1..100}; #создаем файлы
do echo $(( $RANDOM % 8999 + 1000 )) > /home/BBB/2021-11-25/File$i;done #рандомно создаем числа сохраняем их в вновь созданные файлы
cat /home/BBB/2021-11-25/* | while read y #просмотр содержимого файлов из папки
do
echo "$y"
echo "$y" >> /home/BBB/2021-11-25/s #выводит содержимое на экран, сохраняем все числа из созданных файлов File$i в файле s
done
}
function nomer_2 {
sum=0 #переменная для сложения всех чисел
g=0 #переменная для счетчика
A=0 #переменная в которой сохраняем сумму первой половины чисел
B=0 #переменнная в которой сохраняем сумму второй половины чисел
C=0 #переменная в которой сохраняется самое большое число
#for i in ${mass[@]}
for i in `cat /home/BBB/2021-11-25/s`; # открываем файл s в котором содержатся числа
do
sum=$((sum+i)) #складываем все числа
let g+=1 #создали счетчик который увеличивается на +1 при каждом проходе цикла
if [[ $g -le 5 ]]; then #условие в котором говорим что если счетчик меньше или равен 4, тогда числа складваем в переменной A
A=$(( $A + $i ))
elif [[ $g -ge 6 ]]; then #условие в котором говорим что если счетчик больше или равен 5, тогда числа складваем в переменной B
B=$(( $B + $i ))
fi
if [[ $A > $B ]]; then #сравниваем суммы чисел из A и B и выводим если условие верное
C="$A самое большое число лежит в первой чаcти"
#echo "A больше B: $A"
elif [[ $B > $A ]]; then #сравниваем суммы чисел из B и А и выводим если условие верное
C="$B самое большое число лежит во второй части "
#echo "B больше A: $B"
fi
#echo "$i" "$sum" "$g" "$A" "$B"
done
echo "$A сумма первых 50 чисел" "$B сумма вторых 50 чисел"
echo "$C" #выводим наибольшее число
}
function nomer_3 {
min=9999
max=0
for i in {1..100}
do
value=`cat /home/BBB/2021-11-25/File$i`
if [[ "$value" -lt "$min" ]]
then
min=$value
name="File$i"
elif [[ "$value" -gt "$max" ]]
then
max=$value
name1="File$i"
fi
done
echo "Минимальное значение $min найдено в файле $name"
echo "Максимальное значение $max найдено в файле $name1"
echo "Минимальное значение $min найдено в файле $name" >> /home/BBB/2021-11-25/2021-12-30.result
echo "Максимальное значение $max найдено в файле $name1" >> /home/BBB/2021-11-25/2021-12-30.result
}
#rm -f /home/BBB/2021-11-25/* #с помощью этой строки мы удаляем все что создалось в директории
esac
выдает такую ошибку:
введит что хотите выполнить: 0
./Podsget: line 32: syntax error near unexpected token `nomer_1'
./Podsget: line 32: `function nomer_1 {'
Ответы (1 шт):
Автор решения: Saiber Soxov
→ Ссылка
Вопрос решен. Вот код
#!/bin/bash
echo -n "введите слово: "
read Slov # в переменную Slov попадает слово которое ввел пользователь
B=("WD") # в этой переменной храниться слово для сравнения
for i in 1; do
if [[ "$Slov" = "$B" ]]; then #сдесь мы сравниваем введенное слово с те что должно быть
echo "cool" # программа может продолжать работать
else
echo "ввод неверен" # программа должна полностью остановиться
exit 1 #в случае если слово введено неверно скрипт полность прекращает работу
fi
done
echo -n "введит что хотите выполнить: " #здесь мы вводим номер операции которую хотим выполнить
read Nomer
function nomer_1 {
for i in {1..100}; #создаем файлы
do echo $(( $RANDOM % 8999 + 1000 )) > /home/BBB/2021-11-25/File$i;done #рандомно создаем числа сохраняем их в вновь созданные файлы
cat /home/BBB/2021-11-25/* | while read y #просмотр содержимого файлов из папки
do
echo "$y"
echo "$y" >> /home/BBB/2021-11-25/s #выводит содержимое на экран, сохраняем все числа из созданных файлов File$i в файле s
done
}
echo "$y"
function nomer_2 {
sum=0 #переменная для сложения всех чисел
g=0 #переменная для счетчика
A=0 #переменная в которой сохраняем сумму первой половины чисел
B=0 #переменнная в которой сохраняем сумму второй половины чисел
C=0 #переменная в которой сохраняется самое большое число
for i in `cat /home/BBB/2021-11-25/s`; # открываем файл s в котором содержатся числа
do
sum=$((sum+i)) #складываем все числа
let g+=1 #создали счетчик который увеличивается на +1 при каждом проходе цикла
if [[ $g -le 5 ]]; then #условие в котором говорим что если счетчик меньше или равен 4, тогда числа складваем в переменной A
A=$(( $A + $i ))
elif [[ $g -ge 6 ]]; then #условие в котором говорим что если счетчик больше или равен 5, тогда числа складваем в переменной B
B=$(( $B + $i ))
fi
if [[ $A > $B ]]; then #сравниваем суммы чисел из A и B и выводим если условие верное
C="$A самое большое число лежит в первой чати"
elif [[ $B > $A ]]; then #сравниваем суммы чисел из B и А и выводим если условие верное
C="$B самое большое число лежит во второй части "
fi
done
echo "$A сумма первых 50 чисел" "$B сумма вторых 50 чисел"
echo "$C" #выводим наибольшее число
}
function nomer_3 {
min=9999 #самое большое число которое может быть минимальным
max=0 #самое маленькое число которое может быть максимальным
for i in {1..100}
do
value=`cat /home/BBB/2021-11-25/File$i` #читаем поочереди все файлы
if [[ "$value" -lt "$min" ]] #ищем самое маленькое число
then
min=$value #записываем в переменную самое маленькое число
name="File$i" #находим файл в котором храниться самое маленькое число
elif [[ "$value" -gt "$max" ]] #ищем самое большое число
then
max=$value # записываем в переменную самое большое число
name1="File$i" #находим файл в котором храниться самое большое число
fi
done
echo "Минимальное значение $min найдено в файле $name"
echo "Максимальное значение $max найдено в файле $name1"
echo "Минимальное значение $min найдено в файле $name" >> /home/BBB/2021-11-25/$(date +%Y-%m-%d).result
echo "Максимальное значение $max найдено в файле $name1" >> /home/BBB/2021-11-25/$(date +%Y-%m-%d).result
}
case $Nomer in #Выполняем заданное действие
"0")
# Выполняем разом все действия
nomer_1
nomer_2
nomer_3
;;
#Выполнение команд по отдельности
"1")
nomer_1
;;
"2")
nomer_2
;;
"3")
nomer_3
;;
esac #заканчивает работу case
tar cfvz WD.$(date +%Y-%m-%d).tar.gz /home/BBB/Podsget /home/BBB/2021-11-25/* #создаем архив со всеми файлами
rm -f /home/BBB/2021-11-25/* #удаляем все созданные файлы в директории /2021-11-25