2014-04-28 34 views
1

此腳本每5秒檢查文件是否存在僅30秒。腳本等待文件出現 如果它發現該文件,它會回顯「info:等待完成「。在帶條件語句的while循環中放置錯誤消息

我遇到的麻煩是如果找不到文件,則在30秒後退出 後出現錯誤消息。

腳本配置的方式現在在每個循環之後打印錯誤超時。

#!/bin/bash 
count=1 
while [ $count -le 6 ] 
do 
    if [ ! -e /tmp/2007.txt ] 
    then 
     echo "info : sleeping for 5 seconds" 
     ((count++)) 
    sleep 5 
    elsif [ -e /tmp/2007.txt ] 
    echo "info: done waiting" 
    break 
    fi 
echo "error: timeout" 
done 

這是我得到的(壞)

info : sleeping for 5 seconds 
error: timeout 
info : sleeping for 5 seconds 
error: timeout 
info : sleeping for 5 seconds 
error: timeout 
info : sleeping for 5 seconds 
error: timeout 
info : sleeping for 5 seconds 
error: timeout 
info : sleeping for 5 seconds 
error: timeout 

,如果我把它退出循環 - 它的偉大工程

break 
    fi 

done 
echo "error: timeout" 

這就是我得到

[email protected] ~ $ /tmp/wait_while 
info : sleeping for 5 seconds 
info : sleeping for 5 seconds 
info : sleeping for 5 seconds 
info : sleeping for 5 seconds 
info : sleeping for 5 seconds 
info : sleeping for 5 seconds 
error: timeout 
[email protected] ~ $ 

但是,如果我觸摸/tmp/2007.txt文件 - 它破壞bu t的誤差超時 仍顯示

[email protected] ~ $ /tmp/wait_while 
info : sleeping for 5 seconds 
info : sleeping for 5 seconds 
info: done waiting 
error: timeout 

這是一個簡單的問題,而是因爲它反映了我在理解的共同問題,條件語句和在哪裏放置這些循環我帶在這裏向社會聲明。我在腳本中遇到了這個問題,我需要理解這一點,我需要發展。我正在尋找的是檢查30秒的腳本,以及是否找不到任何可以拋出錯誤消息的腳本。如果腳本找到該文件,我希望它讓我知道,而不是踢出錯誤信息。

回答

0

您可以在while循環之後檢查是否找到文件,然後顯示錯誤消息。

#!/bin/bash 

found=0 
count=1 
while [ $count -le 6 ] 
do 
    if [ ! -e /tmp/2007.txt ] 
    then 
     echo "info : sleeping for 5 seconds" 
     ((count++)) 
     sleep 5 
    else 
     echo "info: done waiting" 
     found=1 
     break 
    fi 
done 

if [ ! $found ] 
then 
    echo "error: timeout" 
fi 
+0

可以使用用於comparisions算術表達式,如下所示:''而((計數<= 6))''。如果你使用bash,你也不應該使用''[''''''''''''' –

0

您只希望如果while循環「失敗」要打印的「超時」的消息,那就是,如果所需的文件沒有找到。您可以使用以下方法:

while ((++count <= 6)) 
do 
    if [ ! -e /tmp/2007.txt ] 
    then 
     echo "info : sleeping for 5 seconds" 
     sleep 5 
    elif [ -e /tmp/2007.txt ]; then 
     echo "info: done waiting" 
     break 
    fi 
    false 
done || echo "error: timeout" 

如果/tmp/2007.txt是迄今爲止發現,在循環運行的最後一個命令將是echo語句(或[ -e /tmp/2007.txt ],如果你刪除的記錄),其中有一個零退出狀態。否則,最後一個運行的命令是false,它總是有一個非零的退出狀態,所以循環的退出狀態也是非零的。

0

您可以對文件中存在的「而」循環檢查,或做「而」循環睡眠30秒:

對文件中存在的「而」循環檢查:

#!/bin/bash 
count=0 
timed_out=false 
while [ ! -e file ]; do 
    echo "info : sleeping for 5 seconds" 
    ((count++)) 
    sleep 5 
    if [ $count -eq 6 ]; then 
     timed_out=true 
     break 
    fi  
done 
if $timed_out; then 
    echo "error: timeout" 
    exit 1  # error 
else 
    echo "info: done waiting" 
    exit 0  # success 
fi 

請的 「while」 循環睡眠持續30秒:

#!/bin/bash 
timed_out=true 
count=0 
while [ $count -lt 6 ]; do 
    if [ ! -e file ]; then 
     echo "info : sleeping for 5 seconds" 
     ((count++)) 
     sleep 5 
    else 
     timed_out=false 
     break 
    fi 
done 
if $timed_out; then 
    echo "error: timeout" 
    exit 1  # error 
else 
    echo "info: done waiting" 
    exit 0  # success 
fi