Мне трудно заставить цикл 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» является целым числом, не должно быть разницы между запросом у пользователя диапазона и его помещением в цикл или просто установкой его по умолчанию при написании скрипта. Однако, очевидно, есть разница ... Любое понимание решения этой проблемы приветствуется. Спасибо.