Прежде всего, код, который вы сначала представили в своем вопросе, имел следующую строку:
sum=$((i3+j3))
, которая, исходя из указанной ошибки, была опечаткой; в этом отношении ваш вопрос был отредактирован таким образом, что эта строка становится
sum=$((i**3+j**3))
, что, скорее всего, соответствует вашему сценарию.
Кроме этого, ваш вопрос был отформатирован только немного лучше, не меняя ничего значащего.
Тем не менее, сценарий все еще был неправильным по той простой причине, что он не содержит закрывающего done
ни для одного из двух циклов for
:
for i in {1..$1}
do
for j in {1..$2}
do
sum=$((i**3+j**3))
done # this was missing
done # this was missing
Попытка выполнить этот скрипт без в строках done
должна появиться ошибка:
./yourfile.sh: line theLine: syntax error: unexpected end of file
Однако, поскольку вы показываете другую ошибку, я делаю вывод, что вы на самом деле ставите два done
s в вашем скрипте, и что вы забыли их только в вопросе.
Итак, в итоге ваш код будет следующим:
for i in {1..$1}; do
for j in {1..$2}; do
sum=$((i**3+j**3))
done
done
, который выдает ошибку, которой вы поделились По причине, объясненной Jetchisel в комментарии:
{1..$1}
не будет работать, потому что расширение скобки происходит до расширения переменной, поэтому у вас остается буквальный $1
после l * 104 1 * готово.
Это для ответа на вопрос Чего мне не хватает? .
Способы правильного поведения объясняются в других ответах .