Loops and Lists
While Loops
Repeating Until Done
A while loop repeats as long as its test succeeds. Updating the loop variable moves the script toward the exit.
Program
Play the script to watch count decrease until the loop finishes.
while_loop.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash
count=3
while (( count > 0 )); do
echo "tick:$count"
count=$((count - 1))
done
echo "done"
count ← 3
3count=34while (( count > 0 )); dovalues this step3countpath ← loop
3count=34while (( count > 0 )); do5 echo "tick:$count"values this steplooppath3countecho "tick:$count"
4while (( count > 0 )); do5 echo "tick:$count"6 count=$((count - 1))outputtick:3values this step3countcount ← 2
5 echo "tick:$count"6 count=$((count - 1))7donevalues this step3 → 2countpath ← loop
3count=34while (( count > 0 )); do5 echo "tick:$count"values this steplooppath2countecho "tick:$count"
4while (( count > 0 )); do5 echo "tick:$count"6 count=$((count - 1))outputtick:2values this step2countcount ← 1
5 echo "tick:$count"6 count=$((count - 1))7donevalues this step2 → 1countpath ← loop
3count=34while (( count > 0 )); do5 echo "tick:$count"values this steplooppath1countecho "tick:$count"
4while (( count > 0 )); do5 echo "tick:$count"6 count=$((count - 1))outputtick:1values this step1countcount ← 0
5 echo "tick:$count"6 count=$((count - 1))7donevalues this step1 → 0countpath ← exit
3count=34while (( count > 0 )); do5 echo "tick:$count"values this stepexitpath0countecho "done"
7done8echo "done"outputdone
Count Down
countstarts at3.- The loop runs while
count > 0. - Each pass prints the current count.
- Each pass subtracts
1. - When
countreaches0, the script printsdone. | Before pass | Printed line | Next count | | --- | --- | --- | |3|tick:3|2| |2|tick:2|1| |1|tick:1|0|
while loop
`while` checks its condition before each iteration.
loop exit
The loop stops once the condition command returns a nonzero status.
Exercise: while_loop.sh
Use a while loop to count down from 3, print each tick, and print done at the end