I use Bash one liners a lot. I think they are an important part of any programmers and sysadmins toolkit. If you can’t write a bash one liner, even a simple iterator, then you really need to learn. I promise it will make your life infinitely more pleasant.
Frequently I find myself writing things that require a loop or an increment of numbers. A good example would be like something that would walk over my web servers and check their uptime, load averages, etc. Using seq, that’s easy. But since Mac OS X doesn’t come with the seq command, I would previously improvise.
$ for n in `seq 1 6`; do echo -n "web${n}: "; ssh web$n uptime; done;
web1: 18:36:56 up 82 days, 22:50, 4 users, load average: 0.03, 0.00, 0.00
web2: 18:36:56 up 82 days, 22:48, 2 users, load average: 0.07, 0.00, 0.00
web3: 18:36:56 up 82 days, 22:47, 3 users, load average: 0.04, 0.00, 0.00
web4: 18:36:56 up 82 days, 22:47, 2 users, load average: 0.03, 0.00, 0.00
web5: 18:36:56 up 82 days, 22:45, 2 users, load average: 0.01, 0.00, 0.00
web6: 18:36:56 up 82 days, 22:45, 2 users, load average: 0.01, 0.00, 0.00
# Mac
$ for n in `echo "1 2 3 4 5 6"`; do echo -n "web${n}"; ssh web$n uptime; done;
web1: 18:36:56 up 82 days, 22:50, 4 users, load average: 0.03, 0.00, 0.00
web2: 18:36:56 up 82 days, 22:48, 2 users, load average: 0.07, 0.00, 0.00
web3: 18:36:56 up 82 days, 22:47, 3 users, load average: 0.04, 0.00, 0.00
web4: 18:36:56 up 82 days, 22:47, 2 users, load average: 0.03, 0.00, 0.00
web5: 18:36:56 up 82 days, 22:45, 2 users, load average: 0.01, 0.00, 0.00
web6: 18:36:56 up 82 days, 22:45, 2 users, load average: 0.01, 0.00, 0.00
That is no longer the case. I could have written this myself, but since I am not for reinventing the wheel, I Google’d around and found count.
web1: 18:36:56 up 82 days, 22:50, 4 users, load average: 0.03, 0.00, 0.00
web2: 18:36:56 up 82 days, 22:48, 2 users, load average: 0.07, 0.00, 0.00
web3: 18:36:56 up 82 days, 22:47, 3 users, load average: 0.04, 0.00, 0.00
web4: 18:36:56 up 82 days, 22:47, 2 users, load average: 0.03, 0.00, 0.00
web5: 18:36:56 up 82 days, 22:45, 2 users, load average: 0.01, 0.00, 0.00
web6: 18:36:56 up 82 days, 22:45, 2 users, load average: 0.01, 0.00, 0.00
I can’t take any credit for this script, nor do I plan to. But I feel that all Mac shell users should have this available to them. The original was written by Dave Taylor and is located here. I strongly suggest that in addition to copying the script, you read his explanation of its utility. It give you the ability to increment or decrement, whichever you find the need for.
To install, just copy and paste into /usr/local/bin/count and then chmod +x /usr/local/bin/count.
Here is the script in its entirety.
# count - step through numeric values until you get to the max value
if [ "$#" -lt 2 ] ; then
echo "Usage: count {increment}"
exit 1
fi
counter="$1"
max="$2"
if [ "$#" -eq 2 ] ; then
step=1
else
step=$3
fi
while [ $counter -le $max ] ; do
echo $counter
counter=$( expr $counter + $step )
done
exit 0