To expand on what Corona wrote, running with the Bourne shell sh, your loop (failing to understand {1..8} as it is a bash expression giving boundaries) will use it as a single term.
First time through, variable $i will be the literal string {1..8} and your loop will run (displaying an n )
When the loop hits the done and tries again, there are no other items in the list to process, so the loop ends.
You can see this effect by displaying the value of $i from within the loop and then try it both ways.