That is the syntax of the command. See Compound Commands
for name [ [in [words …] ] ; ] do commands; done
Note specifically: `do commands`
Most people put the `do` and `commands` on a separate line to allow for easier readability but it is not necessary, you could write:
for i in thing
do something
done
I know this question is specifically about shell and I have linked to the bash manual. It is not written that way in the shell manual but it is written that way in an article written by Stephen Bourne for byte magazine.
Stephen says:
> A _command list_ is a sequence of one or more simple commands separated or terminated by a newline or `;` (semicolon). Furthermore, reserved words like _do_ and _done_ are normally preceded by a newline or `;`... In turn each time the command list following _do_ is executed.