我有一个像这样的脚本:
while :
do
Start_Time=$(date +"%s")
MAIN PROGRAM GOES HERE (CROPPED TO SHORTEN THINGS)
Run_Time=$(( $(date +"%s") - $Start_Time ))
if [[ $Run_Time < $Wait_Time ]]
then
Delay_Time=$(( $Wait_Time - $Run_Time ))
sleep $Delay_Time
else
echo "Delay exceeded"
echo $Run_Time
echo $Wait_Time
fi
done
我的问题是,有时即使运行时间小于等待时间,它也无法通过<测试
这是上一次运行的输出:
Delay exceeded
Run_Time 4
Wait_Time 30
尝试运行以下代码片段:
if [[ 5 < 20 ]]
then
echo "5 < 20, as expected"
else
echo "5 is not less than 20, but why?"
fi
和输出将是5 is not less than 20, but why?
。答案是您使用的是<
条件表达式运算符,该运算符已记录为:
string1 <string2 如果在当前语言环境中string1在字典顺序上排在string2之前,则为true。
而您的问题是,按字典顺序(或基本上按字母顺序)在“ 5”之前是“ 20”。
您正在寻找:
if (( $Run_Time < $Wait_Time ))
相反,它使用算术评估和小于的算术运算,而这正是您所需要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句