почему не работает 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
→ Ссылка