Until Loops

The until loop is exactly like the while loop but the test is negated. This can improve readability and in certain circumstances makes a string of conditionals easier to write. Here, the code in until.sh is a clear description of how long the loop should run for: until $a is greater than 12, or $b is less than 100. On each iteration of the loop, $a is incremented by 1, and 10 is taken away from $b.

download.eps
cat until.sh
#!/bin/bash
read -p "Enter a starting value for a: " a
read -p "Enter a starting value for b: " b
until [ $a -gt 12 ] || [ $b -lt 100 ]
do
  echo "a is ${a}; b is ${b}."
  let a=$a+1
  let b=$b-10
done
./until.sh
Enter a starting value for a: 5
Enter a starting value for b: 200
a is 5; b is 200.
a is 6; b is 190.
a is 7; b is 180.
a is 8; b is 170.
a is 9; b is 160.
a is 10; b is 150.
a is 11; b is 140.
a is 12; b is 130.
./until.sh
Enter a starting value for a: 10
Enter a starting value for b: 500
a is 10; b is 500.
a is 11; b is 490.
a is 12; b is 480.
./until.sh
Enter a starting value for a: 1
Enter a starting value for b: 120
a is 1; b is 120.
a is 2; b is 110.
a is 3; b is 100.
$

until.sh

To write this in a while loop, everything has to be negated: -gt becomes -le, -lt becomes -ge, and || becomes &&. The description of the code changes too; without-until.sh continues incrementing a and reducing b by 10 for as long as a is less than (or equal to) ...

Get Shell Scripting: Expert Recipes for Linux, Bash, and More now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.