2015-04-05 56 views
-1

我正在编写一个代码,以每10秒钟的睡眠时间打印点。而且,在每个睡眠会话结束时,睡眠间隔应增加5.如果剩余睡眠时间少于总睡眠时间的一半(即6),则脚本应显示经过的时间。Shell函数不在IF子句中执行

下面是代码,

#!/bin/bash 

current_sleep_sess=0 
total_sleep_sess=6 
rem_sleep_sess=6 
sleep_interval=10 
SECONDS=0 

elapsed_time() 
{ 
    sec=$1 
    ((sec < 60)) && echo -e "[Elapsed Time : $sec sec]\c" 

    ((sec >= 60 && sec > 3600)) && echo -e "[$((sec/60)) min $((sec % 60)) sec]\c" 

    ((sec >= 3600)) && echo -e "[$((sec/3600)) hrs $(((sec % 3600)/60)) min $(((sec % 3600) % 60)) sec]\c" 
} 

until ((rem_sleep_sess == 0)) 
do 

    ((current_sleep_sess=$current_sleep_sess+1)) 

    sleep $sleep_interval 
    echo -e ".\c" 

    if ((rem_sleep_sess <= $((total_sleep_sess/2)))) 
    then 
     elapsed_time $SECONDS 
     echo 
    fi 

    ((sleep_interval=$sleep_interval+5)) 
    ((rem_sleep_sess=$total_sleep_sess-$current_sleep_sess)) 

done 

的问题是,当我使用ELAPSED_TIME $秒内没有的if条款,那么函数执行,但是当我在if子句中使用它,那么函数获取跳过。有什么,我缺少一些语法规则?

回答

0

您写道:

((sec >= 60 && sec > 3600)) && # [...] 

,但你可能是指:

((sec >= 60 && sec < 3600)) && # [...] 

输出:

....[1 min 10 sec] 
.[1 min 40 sec] 
.[2 min 15 sec]