Bash中的嵌套条件(如果[[...]

时间:2011-05-06 10:04:20

标签: bash if-statement nested conditional-statements square-bracket

我有几个问题我想回答,因为到目前为止我还不是Bash专家...在执行特定任务之前我需要检查几个条件,但其中一些是相关的,不能分离:我想要检查以下声明:

if ((1 OR 2) AND (3 OR 4))
   then
      blabla...
fi

到目前为止,我做到了这一点,

if [[ "[ `echo "$5" | cut -c 1-2` -lt 0 || `echo "$5" | cut -c 1-2` -gt 23 ]" && "[ `echo "$5" | cut -c 4-5` -lt 0 || `echo "$5" | cut -c 4-5` -gt 23 ]" ]]
   then
      echo "La plage horaire indiquée n'est pas valide ! Format = HH-HH"
      exit 3
fi

它运作正常。我觉得为了执行这项检查,可以做的更容易,但我看不出如何......

第二件事,在我上面写的代码中,你可以看到:

"[ `echo "$5" | cut -c 1-2` -lt 0 || `echo "$5" | cut -c 1-2` -gt 23 ]"

简单的方括号对应于测试功能,对吗?那么为什么在使用双引号时适当调用呢?我明白我不能把任何反引号放在那里,对于我的回音“$ 5”来说它没有任何意义......但双引号应该取代特殊字符如$并防止忽略单个空格,所以为什么呢它取代了[人物?它被认为是这些特殊人物之一吗?

提前感谢您的回答!

2 个答案:

答案 0 :(得分:1)

不要重复自己:

a=$(echo "$5" | cut -c 1-2)
b=$(echo "$5" | cut -c 4-5)

或使用bash参数扩展语法:

a=${5:0:2}
b=%{5:3:2}

你可以使用算术替换:

if (( a < 0 || a > 23)) && (( b < 0 || b > 23 )); then
      echo "La plage horaire indiquée n'est pas valide ! Format = HH-HH"
      exit 3
fi

答案 1 :(得分:0)

来自help [[

 ( EXPRESSION )   Returns the value of EXPRESSION