This post is a little bit infantile, since it does present a really, really simple thing, but I wrote the shell code yesterday for a backup script and it seems as I will not need it. So I write it down here so either I do not forget it (who knows when it will come in handy?) or perhaps someone else says: “Hey my script could be much easier using this”. In the next days I will post the code that replaces the code shown in this post, so stay tuned.
Here is a short bash function, that offers you to retrieve the value of the index in a ring buffer for a given position argument:
function ring () {
if (( ($1 % $2) < 0 )); then
ringval=$(($2 + ($1 % $2)))
else
ringval=$(($1 % $2))
fi
if (( "$ringval" < 10 )); then
echo "0$ringval"
else
echo "$ringval"
fi
}
function stripzeros () {
stripped=${1#"${1%%[!0]*}"}
if [ -z "$stripped" ]; then
echo "0"
else
echo $stripped
fi
}
# e.g.: 08
currhour="`date \"+%H\"`"
# e.g.; 07
lasthour=$(ring $(($(stripzeros ${currhour})-1)) "24")
[/sourcecode]
The padding and stripping of zeros could be scripted much more elegantly and reliable, but for representing hours of a day this suffices. If someone creates a general script out of it, please feel free to send it in a comment to me, I will add it to this post.