Låt oss ta en enkel for loop 
#!/bin/bash for i in `seq 1 10`; do echo $i done 
AFAIK semikolon i bash-skript gör att shell kör nuvarande kommando synkront och sedan går till nästa. Att trycka på enter gör bokstavligen detsamma förutom att det inte tillåter dig att ange följande kommando och spola bufferten omedelbart.
Så varför shell inte kan tolka följande rad
for i in `seq 1 10`; do; echo $i; done 
 hur fungerar det for loop fungerar? 
Svar
 Syntaxen för en for -slinga från bash manuell sida är 
for name [ [ in [ word ... ] ] ; ] do list ; done 
 Semikolonerna kan ersättas med vagnreturer, som noteras någon annanstans i bash manuell sida: ”En sekvens av en eller flera nya rader kan visas i en lista istället för ett semikolon för att avgränsa kommandon.” 
 Det omvända är dock inte sant, du kan inte godtyckligt ersätta nya rader med semikolon. Ditt flerspråkiga skript kan konverteras till en enda rad så länge du följer ovanstående syntaxregler och inte infogar ett extra semikolon efter do: 
for i in `seq 1 10`; do echo $i; done 
Kommentarer
-  Det slutliga skriptet är fel, som @ dr01 påpekade, du måste ta bort semikolon efter 
do. -  @jake, detta säger också att du måste ta bort semikolon efter 
do. Dessutom förklarar detta svar varför du måste ta bort semikolon efter `do '. -  Vad händer om 
$imåste ingå i ett filnamn? Behöver det dubbla citat? -  gör 
filename_${i}sedan - @ user4556274 enligt syntaxen " för jag gör; gjort " bör också fungera. varför inte ' t det?
 
Svar
 Semikolon efter do är ett fel och borde inte vara där. 
Följande fungerar korrekt:
for i in `seq 1 10`; do echo $i; done