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 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
2

You should use bc when doing math in shell

if [ `echo "3 % 2" | bc` -eq 0 ]
2

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), and bc (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.


James H. Sterling

James H. Sterling

Environmental Science & Climate Journalist

James Sterling reports on renewable energy developments, climate policy, ecological conservation, and green tech innovations around the globe.