我最近开始使用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;
答案 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