Looping the Easy Way

The seq command doesn't do a lot, but it saves a lot of annoying little issues in scripts

Since I've been using Solaris since the dawn of time (as far back as 1983 anyway when SunOS wasn't yet called "Solaris") and use Linux systems only now and then, I have only just learned about the seq command. The seq command doesn't do a whole lot. It just generates a sequence of numbers. Even so, it saves me a lot of annoying little issues in my scripts, such as whether I need to use "less than" (-lt) or "less than or equal to" (-le) and whether I have incremented my loop counter correctly and in the right place in my loop or initialized it in the first place.

On Linux systems, "seq 5 11" will generate a list of numbers starting with 5 and ending with 11.

seq 5 11
5
6
7
8
9
10
11

Now, doesn't that just make your day? OK, maybe not. But, think how nice it would be to turn a script like this:

# opens 4 terminal windows

i="0"

while [ $i -lt 4 ]
do
    xterm &
    i=$[$i+1]
done

into one like this:

# opens 4 terminal windows

while [ seq 1 4 ]
do
    xterm &
done

Less annoyance is always a good thing. It leaves some of those diminishing brain cells free for harder tasks.

Of course after discovering seq on a Linux system (thanks to a student of mine -- Hi, Jeremy!), I went back to my beloved Solaris box and ... no seq!

Being unwilling to go back to incrementing loop counters (at least not more than one more time), I decided to implement seq in bash and drop my script in /usr/local/bin. Should be nearly as easy to do this in C and compile the little darling.

#!/bin/bash

if [ $# != 2 ]; then
    echo "USAGE: $0 <begin> <end>"
    exit 1
else
    curr=$1
    end=$2
fi

while [ $curr -le $end ]
do
    echo $curr
    curr=$[$curr+1]
done

Of course not all while loops loop on integers, never mind sequential integers, but this little "trick" is a nice one to use when they do.

Insider: How the basic tech behind the Internet works
Join the discussion
Be the first to comment on this article. Our Commenting Policies