I'm used to csh, so this is kinda irritating having to use bash. What is wrong with this code?
if[$time > 0300] && [$time < 0900]
then
$mod=2
else
$mod=0
fi
I'm used to csh, so this is kinda irritating having to use bash. What is wrong with this code?
if[$time > 0300] && [$time < 0900]
then
$mod=2
else
$mod=0
fi
By standard it should be
if [ "$time" -gt 300 ] && [ "$time" -lt 900 ]
then
mod=2
else
mod=0
fi
In normal shell scripts you use [
and ]
to test values. There are no arithmetic-like comparison operators like >
and <
in [ ]
, only -lt
, -le
, -gt
, -ge
, -eq
and -ne
.
When you're in bash, [[ ]]
is preferred since variables are not subject to splitting and pathname expansion. You also don't need to expand your variables with $
for arithmetic comparisons.
if [[ time -gt 300 && time -lt 900 ]]
then
mod=2
else
mod=0
fi
Also, using (( ))
for arithmetic comparisons could be best for your preference:
if (( time > 300 && time < 900 ))
then
mod=2
else
mod=0
fi