2011-05-06 82 views
0

我有几个问题我想回答,因为我不是一个专家猛砸到目前为止......有几个条件,我需要执行一个特定的前检查任务,但他们中的一些是相关的,不能分离:我想检查下面的语句:嵌套条件(如[...)

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美元”是没有任何意义的......但是双引号应该替换特殊字符,比如$和防止忽略单个空格,所以为什么它取代了[角色?它被认为是这些特殊字符之一吗?

预先感谢您为您解答!

回答

1

不要重复自己:

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

或使用bash参数扩展的语法:

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

你也可以使用arithme抽动替代:

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 
0

help [[

(EXPRESSION) Returns the value of EXPRESSION 
+0

嗯...奇怪,我敢肯定,我以前试过,语法,我得到了一个错误,但现在的工作......我必须在此期间已经改变了这个东西无关。 谢谢你的回答,我想我无法再让这个表达式变得更简单了,即使你强调了一个有趣的观点(我不会调用测试操作符[在我的表达式中再也不会这样了,也许它会花费更少资源......)! – SonicGold 2011-05-06 11:12:39