Таймер Bash Script - PullRequest
       29

Таймер Bash Script

1 голос
/ 08 июня 2011

Я недавно начал писать код в bash, и я делаю компакт-диск с диагностической проверкой для стоечных компьютеров для печати на ЖК-экране.

Пока все работает, но я хочу, чтобы это было когдаон попадает в ту часть, где он проверяет, какие порты Ethernet отключены, он остается там в течение 30 минут или около того, повторяя проверку, а затем переходит к сценарию.

IE: при отключении 1-го порта EthernetЖК-дисплей отображает LAN 1 DIS, подключите его, и он исчезнет.При отключении 1 и 2 он чередуется между произнесением LAN 1 DIS и LAN 2 DIS, поэтому я хочу, чтобы он продолжал делать это в течение определенного периода времени, а затем продолжил.

Я посмотрел cron, и это, кажется,полезно для создания таймеров на постоянных системах, но я просто хочу, чтобы компакт-диск загрузился, выполните проверку, а затем извлеките ее, и пусть реальная ОС вступит во владение, и я попытался использовать:

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 голосов
/ 08 июня 2011

Не проверено, но приведенный ниже скрипт должен делать то, что вы хотите. Он использует счетчик, чтобы отслеживать, сколько времени осталось в цикле. Он уменьшается и проверяется после каждой итерации цикла.

#! /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
...