2011-06-08 51 views
1

我最近開始在bash編碼,我正在製作診斷檢查光盤,以便機架安裝的計算機打印到LCD屏幕上。Bash腳本定時器

到目前爲止它可以工作,但我想要它做的是當它到達它檢查什麼以太網端口被拔出的部分時,它停留在那裏30分鐘左右,重複檢查並且隨後通過腳本繼續。

IE:拔出第一個以太網端口時,LCD顯示LAN 1 DIS,插入並消失。在拔下插頭之後,它說出LAN 1 DIS和LAN 2 DIS,所以我希望它在指定的時間內繼續這樣做,然後繼續。

我查過了cron,這對於在永久系統上製作計時器似乎很有用,但我只想讓cd啓動,執行檢查然後彈出它,讓真正的操作系統接管,並且我嘗試過使用:

while [ `sleep 30m` ]; 
    do  

    /mnt-system/KNOPPIX/lcdwriter.pl ""; 
    BAD=""; 

    for i in 0 1 2 3 
    do 

    #LAN number to ETH number mapping 
    case $i in 
    0) 
     j=1; 
    ;; 
    1) 
     j=2; 
    ;; 
    2) 
     j=4; 
    ;; 
    3) 
     j=3; 
    ;; 
    esac 


    STATUS=`/usr/sbin/ethtool eth$i | grep "Link detected: no"`; 

    if [ "x$STATUS" != "x" ] 
    then 
     BAD=$BAD$j; 
     echo "LAN $BAD Disconnected"; 
     /mnt-system/KNOPPIX/lcdwriter.pl "LAN $BAD DIS"; 

    sleep 5; 
    fi 
    done; 
     done; 

回答

0

未經測試,但下面的腳本應該做你想要的。它使用計數器來跟蹤循環中剩下多少時間。它在循環中每次迭代之後遞減並測試。

#! /usr/bin/bash 
#LAN number to ETH number mapping 
function eth2lan() { 
    case "$1" in 
    0) 
     echo 1; 
     ;; 
    1) 
     echo 2; 
     ;; 
    2) 
     echo 4; 
     ;; 
    3) 
     echo 3; 
     ;; 
    esac 
} 
timeleft=$((30 * 60)) 

while true; do 
    for i in 0 1 2 3; do 
     /mnt-system/KNOPPIX/lcdwriter.pl "" 
     if /usr/sbin/ethtool eth$i | grep -qs "Link detected: no"; then 
      echo "LAN $(eth2lan $i) Disconnected" 
      /mnt-system/KNOPPIX/lcdwriter.pl "LAN $(eth2lan $i) DIS"; 
     fi 
    done 
    timeleft=$(($timeleft - 5)) 
    if [[ "$timeleft" -lte 0 ]]; then 
     break 
    fi 
    sleep 5 
done 
+0

謝謝。我現在正在嘗試這個,我們會看看它在哪裏。 – 2011-06-08 17:20:02

+0

完美地工作。萬分感謝! – 2011-06-08 19:31:00