【发布时间】:2016-09-19 15:16:25
【问题描述】:
以下是我在其上应用以下 unix 脚本的文件。
0.30 2.30 - - - - - - -
2.30 3.30 - - NA NA - - -
3.30 4.30 - - NA NA - - -
4.30 5.30 - - - - - - -
5.30 6.30 - - NA NA - - -
6.30 0.30 - - - - - - -
##Time=`echo $(date) | awk -F ' ' '{print $4}' | awk -F ':' '{print $1}'`
Time=05;
Result="False";
while [[ "${Result}" != "True" ]]
do
while read -r f1 f2 f3 f4 f5 f6 f7 f8 f9
do
if [[ "${Time}" -ge "${f1}" && "${Time}" -le "${f2}" ]]
then
echo $Time is between $f1 $f2 True
Result="True";
else
echo $Time is between $f1 $f2 False
fi
done < consolidated.txt
done
我得到以下结果:请注意 if 条件被满足了两次。 05 不在 5.30 和 6.30 之间,它仍然返回 true。 我在这里错过了什么。
05 is between 0.30 2.30 False
05 is between 2.30 3.30 False
05 is between 3.30 4.30 False
05 is between 4.30 5.30 True
05 is between 5.30 6.30 True
05 is between 6.30 0.30 False
【问题讨论】:
-
这是什么语言?
-
这是 ksh 中的脚本
-
我们有一个标签。首次发布问题时,您需要包含所有这些重要的详细信息。
-
请注意,您使用对称条件
time >= start && time <= end的测试会导致问题,即 5.30 将同时属于 4.30 - 5.30 和 5.30 - 6.30 时间范围。通常最好使用非对称条件,如time >= start && time < end,而不是在数据中连续设置范围时。这是一个开闭区间。