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
$ to mod when assigning a value to it? $mod=0. In bash it would be interpreted as an expansion of $mod which is an empty string plus =0.FOO= bar is interpreted as running the command bar in an environment where FOO is set to the empty string.
csh, either.