Você já diminuiu bastante, e isso está apenas relacionado a pequenos problemas de sintaxe.
O que você tem, no pseudocódigo, é basicamente isso:
if d3 equals 0 then
set d4 equal to ((d2/10)+1000)
else
set d4 equal to (d2/10)
end if
que se traduz em, no bash (que é o que você mais provavelmente usaria para scripts de shell no Linux):
if test "$d3" -eq "0"; then
d4=$(( ( $d2 / 10 ) + 1000 ))
else
d4=$(( $d2 / 10 ))
fi
Você precisa do fi para finalizar a instrução if e $(( ... )) é a expansão aritmética no bash. Note que $( ... ) é completamente diferente, que é substituição de processo que pega a saída do comando dado e a retorna. Altamente útil, mas não exatamente o que você está procurando aqui.
O acima assume que $d2 , $d3 e $d4 já estão definidos para os valores corretos e que não há variáveis de ambiente com nomes conflitantes definidos.
Se você sabe por um fato que $d3 nunca conterá nada além de dígitos, você pode acabar com as citações nos parâmetros para test , mas eu gosto de mantê-lo como um internet Segura. Para saber mais sobre o que você pode fazer com test (no bash), dê uma olhada em man bash sob o cabeçalho Comandos internos do Shell . Outros shells podem usar o comando externo, caso em que man test se aplica (você pode usar o comando externo no bash, por exemplo, através de if command test ...; then , se preferir, por algum motivo).
O ponto-e-vírgula antes do then é necessário porque then é realmente um comando separado no bash; você também pode colocar then em uma linha separada e omitir o ponto-e-vírgula, que é outra maneira de formatar exatamente a mesma coisa.