I want to do something like this:
if [ $1 % 4 == 0 ]; then
...
But this does not work.
What do I need to do instead?
If you want something a bit more portable - for example, something that works in sh
as well as in bash
- use
if [ $(echo "$1 % 4" | bc) -eq 0 ]; then
...
An example
#!/bin/bash
#@file: trymod4.bash
if [ $(echo "$1 % 4" | bc) -eq 0 ]; then
echo "$1 is evenly divisible by 4"
else
echo "$1 is NOT evenly divisible by 4"
fi
$ chmod +x trymod4.bash
$ ./trymod4.bash 224
224 is evenly divisible by 4
$ ./trymod4.bash 223
223 is NOT evenly divisible by 4
I put this in, because you used the single [ ... ]
conditional, which I usually associate with sh
-compatible programs.
Check that this works in sh
.
#!/bin/sh
#@file: trymod4.sh
if [ $(echo "$1 % 4" | bc) -eq 0 ]; then
echo "$1 is evenly divisible by 4"
else
echo "$1 is NOT evenly divisible by 4"
fi
$ chmod +x trymod4.sh
$ ./trymod4.sh 144
144 is evenly divisible by 4
$ ./trymod4.sh 19
19 is NOT evenly divisible by 4
All right, it works with sh
.
Note the "theoretical" (but not always implemented as such) differences between [ ... ]
and [[ ... ]]
from this site (archived).