Você está chamando o comando [ com os operadores de comparação de número inteiro -lt / -gt em operandos que nem sempre são inteiros decimais.
Você pode ver o que acontece se você executar o script com bash -x . Você verá coisas como:
+ f=
+ '[' '' -gt 0 ']'
./myscript: line 15: [: : integer expression expected
Com:
while [ "$i" -lt "$n" ]
do
[...]
d=${array[$i+1]}
Na última passagem desse loop, você tentará acessar além do último elemento da matriz, então $d estará vazio.
Você também está inicializando $b como uma string 0 e, mais tarde, acessando-a como uma matriz. Veja também como f=${b[$j]} obterá um $f vazio, exceto quando $j for 0.
Eu não sei o que você está tentando fazer com esse código, mas parece que você precisa voltar para a prancheta.