У вас уже есть проблемы с синтаксисом.
То, что у вас есть в псевдокоде, примерно так:
if d3 equals 0 then
set d4 equal to ((d2/10)+1000)
else
set d4 equal to (d2/10)
end if
что переводится как, в bash (что вы, скорее всего, будете использовать для сценариев оболочки в Linux):
if test "$d3" -eq "0"; then
d4=$(( ( $d2 / 10 ) + 1000 ))
else
d4=$(( $d2 / 10 ))
fi
Чтобы завершить оператор fi , вам нужно использовать if , а $(( ... )) - это арифметическое расширение в bash. Обратите внимание, что $( ... ) совершенно другой; это подстановка процесса, которая берет выходные данные данной команды и возвращает их. Очень полезно, но не совсем то, что вы после здесь.
Выше предполагается, что $d2 , $d3 и $d4 уже установлены на правильные значения, и что нет переменных среды с установленными конфликтующими именами.
Если вы точно знаете , что $d3 никогда не будет содержать ничего, кроме цифр, вы можете покончить с цитированием в параметрах для test , но я бы хотел оставить его в качестве защитной сетки. Чтобы узнать больше о том, что вы можете сделать с помощью test (в bash), взгляните на man bash под заголовком встроенных команд Shell . Другие оболочки могут использовать внешнюю команду, в этом случае применяется man test (вы можете использовать внешнюю команду в bash, например, через if command test ...; then если вы предпочитаете это по какой-то причине).
Точка с запятой перед then необходима, потому что then самом деле это отдельная команда в bash; Вы можете также положить then на отдельной строке и опустить точку с запятой, что является еще одним способом форматирования точно то же самое.