Seu script com recuo adequado:
n=0
x=1
while [ $n -lt 6 ]; do
n=$(( n+1 ))
echo "sasadgsad gsda $n" >> /home/test/rptest
if [ $n -eq 5 ]; then
while [ $x -le 5 ]; do
echo "end of line$x" >> /home/test/rptest
x=$(( x+1 ))
done
fi
done
Seu loop externo é executado de 0 a 5, o que é seis vezes. Como você atualiza n
no início do loop externo, o valor de n
passará de 1 a 6 no corpo do loop. Quando n
é 5, você executa outro loop de 1 a 5 apresentando end of line...
. Quando isso for feito, você ainda terá uma iteração do loop externo para fazer.
Outra maneira de escrever o script em bash
:
for (( n=1; n<=5; ++n )); do
printf 'sasadgsad gsda %s\n' "$n"
if (( n == 5 )); then
for (( x=1; x<=5; ++x )); do
printf 'end of line%s\n' "$x"
done
fi
done >>/home/test/rptest
Isso não terá o mesmo problema porque o loop externo pára quando n
atinge 6.
No entanto, se você quiser apenas anexar a saída do loop interno após a saída do outer, você pode executar o seguinte após o outro:
for (( n=1; n<=5; ++n )); do
printf 'sasadgsad gsda %s\n' "$n"
done >>/home/test/rptest
for (( n=1; n<=5; ++x )); do
printf 'end of line%s\n' "$n"
done >>/home/test/rptest
ou, apenas para este exemplo simples,
printf 'sasadgsad gsda %s\n' {1..5} >>/home/test/rptest
printf 'end of line%s\n' {1..5} >>/home/test/rptest