我有几个问题我想回答,因为到目前为止我还不是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”来说它没有任何意义......但双引号应该取代特殊字符如$并防止忽略单个空格,所以为什么呢它取代了[人物?它被认为是这些特殊人物之一吗?
提前感谢您的回答!
答案 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