Bash脚本定时器
问题描述:
我最近开始在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;
答
未经测试,但下面的脚本应该做你想要的。它使用计数器来跟踪循环中剩下多少时间。它在循环中每次迭代之后递减并测试。
#! /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
谢谢。我现在正在尝试这个,我们会看看它在哪里。 – 2011-06-08 17:20:02
完美地工作。万分感谢! – 2011-06-08 19:31:00