Для проблемы с переменной цикла [дубликат]

Мне трудно заставить цикл for принимать вводимые пользователем данные в виде аргумента для созданной мной функции.

#!/bin/bash
number1="$1"    #Assume user input 5
loops="$2"      #Assume user input 5
if [[ ${number1} && ${loops} =~ ^-?[0.00-9.99]+$ ]];then
   for number2 in {1..${loops}}
   do
       Product=$(echo "${number1} * ${number2}" | bc -l)
       echo "${number1} * ${number2} = ${Product}"
       if test ${number2} -eq 7;then
           { echo "----------------------"; echo "${number2} is the best number."; echo "----------------------"; continue; }
       elif test ${number2} -eq 11;then
           { echo "------------------------------"; echo "${number2} is pretty awesome as well."; echo "------------------------------"; continue; }    
       fi 
   done
else
   { echo "Please try again with a valid numerical entry."; exit 1; }
fi

Этот сценарий не запускается, когда пользователь вводит целое число для переменной "loops" и любое число для "number1". number1 = 5 в этом случае. Возвращает ошибку:

(standard_in) 1: синтаксическая ошибка

5 * {1..5} =

/home/$USER/For_Loop_Multiplication.sh: строка 9: тест: {1..5 }: ожидается целочисленное выражение

/home/$USER/For_Loop_Multiplication.sh: строка 11: тест: {1 ..5}: ожидается целочисленное выражение

Если я вместо этого напрямую ввожу конечную границу количества циклов непосредственно в сценарий, как показано ниже, и number1 = 5, он работает нормально:

#!/bin/bash
number1="$1"     #Assume user input 5
if [[ ${number1} =~ ^-?[0.00-9.99]+$ ]];then
   for number2 in {1..5}
   do
       Product=$(echo "${number1} * ${number2}" | bc -l)
       echo "${number1} * ${number2} = ${Product}"
       if test ${number2} -eq 7;then
           { echo "----------------------"; echo "${number2} is the best number."; echo "----------------------"; continue; }
       elif test ${number2} -eq 11;then
           { echo "------------------------------"; echo "${number2} is pretty awesome as well."; echo "------------------------------"; continue; }    
       fi 
   done
else
   { echo "Please try again with a valid numerical entry."; exit 1; }
fi

Он возвращает результат:

5 * 1 = 5

5 * 2 = 10

5 * 3 = 15

5 * 4 = 20

5 * 5 = 25

По сути, я думаю, что происходит то, что сценарий похоже, весь диапазон помещается как значение number2, которое определено как итератор в цикле for. Поскольку ввод для переменной «loops» является целым числом, не должно быть разницы между запросом у пользователя диапазона и его помещением в цикл или просто установкой его по умолчанию при написании скрипта. Однако, очевидно, есть разница ... Любое понимание решения этой проблемы приветствуется. Спасибо.

3
задан 12 June 2020 в 17:37

0 ответов

Другие вопросы по тегам:

Похожие вопросы: