2011-06-08 104 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