Calculate Modulo in Sh Script
I Am Working on an Sh Script in Which I Am in a While Loop Where a Variable Gets Incremented Every Iteration, and I'd Like to Save a File Every Five...
I am working on an sh script in which I am in a WHILE loop where a variable gets incremented every iteration, and I'd like to save a file every five iterations.
What I'd normally do (say in C) would be to do an if ( n % 5 == 0) test, but I don't know whether that's possible here..? If it isn't, does anyone have any ideas that would get the job done?
Cheers!
3 Answers
If your sh really is sh and not just bash being run as sh then this will work just fine
if [ `expr $n % 5` -eq 0 ]
then
# do something
fi
If your sh is really bash then put your test in (( )) like so
if (( $n % 5 == 0 ))
then
# do something
fi
You should use bc when doing math in shell
if [ `echo "3 % 2" | bc` -eq 0 ]
Notes on the above answers
Backticks are considered deprecated by now (many further notes), so I advise on switching to
$(( ... ))or$( ... )constructs.Both
expr(man page), andbc(man page) are external commands, and as such would cause some measurable slowdown in more complex examples than mine or those above. Furthermore, there already is a way to easily avoid them (both). Also, they might not be available on all systems by default for instance.