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
done
I 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.