BASH:如果是那么基本和变量赋值

Cor*_*her 8 bash if-statement

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

if[$time > 0300] && [$time < 0900]
then
$mod=2
else
$mod=0
fi
Run Code Online (Sandbox Code Playgroud)

kon*_*box 16

按标准应该是

if [ "$time" -gt 300 ] && [ "$time" -lt 900 ]
then
   mod=2
else
   mod=0
fi
Run Code Online (Sandbox Code Playgroud)

在普通的shell脚本中,您可以使用[]测试值.有没有算术样比较运营商如><[ ],只有-lt,-le,-gt,-ge,-eq-ne.

当你在bash中时,[[ ]]首选,因为变量不受分裂和路径名扩展的影响.您也不需要使用$算术比较扩展变量.

if [[ time -gt 300 && time -lt 900 ]]
then
   mod=2
else
   mod=0
fi
Run Code Online (Sandbox Code Playgroud)

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

if (( time > 300 && time < 900 ))
then
   mod=2
else
   mod=0
fi
Run Code Online (Sandbox Code Playgroud)

  • Bash 需要对空格敏感,因为像“FOO= bar”这样的东西会被解释为在“FOO”设置为空字符串的环境中运行命令“bar”。 (3认同)
  • @Corepuncher 这没有必要。缩进样式是 shell 脚本中任何人的选择。我认为您在为其赋值时尝试将“$”添加到“mod”?`$mod=0`。在 bash 中,它将被解释为 `$mod` 的扩展,它是一个空字符串加上 `=0`。 (2认同)