17

我习惯了 csh,所以不得不使用 bash 有点烦人。这段代码有什么问题?

if[$time > 0300] && [$time < 0900]
then
$mod=2
else
$mod=0
fi
4

1 回答 1

28

按标准应该是

if [ "$time" -gt 300 ] && [ "$time" -lt 900 ]
then
   mod=2
else
   mod=0
fi

在普通的 shell 脚本中,您使用[and]来测试值。没有类似算术的比较运算符,例如>and <in [ ],只有-lt, -le, -gt, -ge, -eqand -ne

当您使用 bash 时,[[ ]]这是首选,因为变量不受拆分和路径名扩展的影响。您也不需要$为算术比较扩展变量。

if [[ time -gt 300 && time -lt 900 ]]
then
   mod=2
else
   mod=0
fi

此外,(( ))用于算术比较可能最适合您的偏好:

if (( time > 300 && time < 900 ))
then
   mod=2
else
   mod=0
fi
于 2013-09-17T17:44:18.933 回答