Jot
July 17th, 2009
When I first started working on AIX I had come from a BSD background and wanted jot for some scripts I needed to write. This is that script. FreeBSD and Mac OSX have a binary called jot in the default install, AIX and Linux do not. You will see jot come up in many of my scripts because it is so useful in counting forward and backward. The output of this script is purposely designed to be used as input to other scripts. It is a building block upon which many of my other scripts are based.
I realize this is not necessarily about Linux for my first Linux post, but I haven’t decided on having a Code category yet.
Update:
I added a code category and have added this script to it.
#!/bin/bash
# Copyright Jud Bishop 2003-07-28.
# Released under the BSD License.
# This copyright must be left intact.
# I wanted an easy way to count on my
# AIX box and there was none.
# This is my remedy.
#
#
# ./jot.sh will produce
# 1\n 2\n ...(the newlines just keep going)
#
# ./jot.sh -e 10 will end at 10 and produce
# 1\n 2\n ... to 10\n
#
# ./jot.sh -e 10 -b 2 will end at 10 and produce
# 1\n 3\n ... 9\n
#
# ./jot.sh -s 2 -b 2 -e 10 will start at 2 count by 2 and end at 10.
# 2\n 4\n ... 10\n
OPT=
START=0
END=10
COUNTBY=1
X=0
WORD=
JOIN=FALSE
while getopts s:e:b:w:jr OPT
do
case $OPT in
s) START=$OPTARG
;;
e) END=$OPTARG
;;
b) COUNTBY=$OPTARG
;;
w) WORD=$OPTARG
;;
j) JOIN=TRUE
;;
r) REVERSE=TRUE
;;
# \?) echo
*) echo "Usage:"
echo " jot -s 2 -b 2 -e 10"
echo " -s start"
echo " -b count by"
echo " -e end"
exit 1
;;
esac
done
shift `expr $OPTIND - 1`
if [ "$REVERSE" = "TRUE" ]
then
X=${START}
while test $X -ge $END
do
if [ "$WORD" = "" ]
then
echo $X
X=`expr $X - $COUNTBY`
elif [ "$JOIN" = "TRUE" ]
then
echo $WORD$X
X=`expr $X - $COUNTBY`
else
echo $WORD
X=`expr $X - $COUNTBY`
fi
done
else
X=${START}
while test $X -le $END
do
if [ "$WORD" = "" ]
then
echo $X
X=`expr $X + $COUNTBY`
elif [ "$JOIN" = "TRUE" ]
then
echo $WORD$X
X=`expr $X + $COUNTBY`
else
echo $WORD
X=`expr $X + $COUNTBY`
fi
done
fi
exit 0
# Copyright Jud Bishop 2003-07-28.
# Released under the BSD License.
# This copyright must be left intact.
# I wanted an easy way to count on my
# AIX box and there was none.
# This is my remedy.
#
#
# ./jot.sh will produce
# 1\n 2\n ...(the newlines just keep going)
#
# ./jot.sh -e 10 will end at 10 and produce
# 1\n 2\n ... to 10\n
#
# ./jot.sh -e 10 -b 2 will end at 10 and produce
# 1\n 3\n ... 9\n
#
# ./jot.sh -s 2 -b 2 -e 10 will start at 2 count by 2 and end at 10.
# 2\n 4\n ... 10\n
OPT=
START=0
END=10
COUNTBY=1
X=0
WORD=
JOIN=FALSE
while getopts s:e:b:w:jr OPT
do
case $OPT in
s) START=$OPTARG
;;
e) END=$OPTARG
;;
b) COUNTBY=$OPTARG
;;
w) WORD=$OPTARG
;;
j) JOIN=TRUE
;;
r) REVERSE=TRUE
;;
# \?) echo
*) echo "Usage:"
echo " jot -s 2 -b 2 -e 10"
echo " -s start"
echo " -b count by"
echo " -e end"
exit 1
;;
esac
done
shift `expr $OPTIND - 1`
if [ "$REVERSE" = "TRUE" ]
then
X=${START}
while test $X -ge $END
do
if [ "$WORD" = "" ]
then
echo $X
X=`expr $X - $COUNTBY`
elif [ "$JOIN" = "TRUE" ]
then
echo $WORD$X
X=`expr $X - $COUNTBY`
else
echo $WORD
X=`expr $X - $COUNTBY`
fi
done
else
X=${START}
while test $X -le $END
do
if [ "$WORD" = "" ]
then
echo $X
X=`expr $X + $COUNTBY`
elif [ "$JOIN" = "TRUE" ]
then
echo $WORD$X
X=`expr $X + $COUNTBY`
else
echo $WORD
X=`expr $X + $COUNTBY`
fi
done
fi
exit 0