De fyra huvudsakliga kontrollstrukturerna i skalet är "if", "while", "for" och "case". De ser ut på följande sätt:
if villkorskommand then kommando else kommando fi"Else"-delen kan utelämnas.
Upprepningskonstruktionerna "while" och "for" liknar varandra:
while villkor do kommando done for variabel in värde1 värde2 ... do kommando doneI fallet med "for" antar variabeln i tur och ordning vart och ett av värdena som angetts.
Den fjärde kontrollstrukturen är "case" som, precis som i flera andra programspråk, används för att välja mellan flera alternativ. Formen är
case VÄRDE in Första alternativet) Kommandon ;; Andra alternativet) Kommandon ;; fler alternativ... esac
Alternativen tolkas i den ordning som skrivs, och om värdet passar in på mer än ett alternativ väljs det första av de passande alternativen. Vill man ha flera alternativ som gör samma sak, så kan man ange dem med "|" emellan. En ytterligare finess är att alternativen kan innehålla mönstertecken, så att till exempel alternativet "A*" motsvarar vad som helst som börjar med "A". Det finns ingen speciell konstruktion som motsvarar det som brukar heta "else", "otherwise" eller "default" i andra programspråk. Istället använder man alternativet "*" som sista alternativ.