Bash脚本计时器

时间:2011-06-08 15:57:06

标签: bash networking timer automated-tests ethernet

我最近开始使用bash进行编码,我正在为机架式计算机制作诊断检查CD,以打印到LCD屏幕。

到目前为止它的工作原理,但我想要它做的是当它到达检查哪些以太网端口被拔出的部分时,它在那里停留30分钟左右,重复检查,然后继续通过脚本。 / p>

IE:当您拔下第一个以太网端口时,液晶显示屏显示LAN 1 DIS,将其插入并消失。 1& 2未插入时,它在说明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;

1 个答案:

答案 0 :(得分: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