Pisałem od nowa, ale przerwałem, gdy przypomniałem sobie, że miałem podobny problem. Mianowicie tworzyłem plik pingowanie.txt w którym trafiały kolejne pomiary pinga. skrypt miał mi pokazywać na bieżąco zawartość pliku w konsoli. Jak przychodziła nowa linijka to miał mi ją raz wyświetlić(dodać) ale tylko raz.
Tylko jest mały błąd, Jeśli zakładasz, że plik nie może mieć puste linie, to trzeba przerobić plik (jeśli jest pusta linia to się zapętla - trzeba dodać warunek sprawdzenia czy doszło do końca pliku, jeśli nie koniec pliku przejdź do kolejnej linii, jak koniec to czekaj na nową linię)
Kod: Zaznacz cały
#!/bin/bash
linia=1 # aktualna sprawdzana linia
clear
while [ 1 ]; do
if [ -f pingowanie.txt ]; then ilemalini=$(cat pingowanie.txt | wc -l); fi # sprawdź ile ma teraz plik linii
while [ -z "$LINE" ]; do
if [ ! -f pingowanie.txt ]; then
echo "Przerwano sprawdzanie łącza. Plik pomiaru nie istnieje"
exit 1;
fi
LINE="$(sed -n ${linia}p pingowanie.txt)"
if [ ! -z "$LINE" ]; then
let nrlinii=$linia-1
echo -ne "$nrlinii\t$LINE"
echo
fi
if [ $ilemalini -lt $linia ]; then
echo -n "czekanie na kolejny pomiar";
sleep 1;
echo -ne "\r \r"
fi
done;
LINE=""
let linia+=1
#echo "Numer lini $nrlinii / dlugosc pliku $(cat pingowanie.txt | wc -l)"
#if [ ! $(cat pingowanie.txt | wc -l) -gt $nrlinii ]; then
# clear
# linia=1
#fi
done
To ogólny zarys, teraz tylko musisz dodać warunki do sprawdzania czy nr linii = > granica - tam gdzię masz echo z linią (okolice: echo -e "$nrlinii\t$LINE") - tam też trzeba zmienić lekko warunek
Najlepiej skopiuj sobie zawartość stwórz skrypt, stwórz najpierw pusty plik pingowanie.txt, następnie odpal w konsoli skrypt i zacznij edytować plik pingowanie.txt. Dodaj jedna linijkę, zapisz, dodaj kilka niepustych linijek zapisz itd.
U mnie jest mały problem, bo jak jest pusta linijka to się zatrzymuje, aby tego uniknąć, w pętli w której się zatrzymuje, trzeba dodać warunek, że jeśli aktualna linia < lini pliku zwieksz wskaźnik aktualnej linii.
Po sesji jak nie zapomnę i będę miał chęci to dokładniej to przerobię. Choć uważam, że już z tym powinienieś sobie poradzić, wystarczy kilka ifów powstawiać i zmienić warunek w drugim whilu.
Po co ostatni warunek? już nawet nie pamięta.
Wersja po zamianie (zostanie zmienione po sesji w wolnym czasie):
Kod: Zaznacz cały
#!/bin/bash
plik='plik.txt'
linia=1 # aktualna sprawdzana linia
clear
while [ 1 ]; do
if [ -f "$plik" ]; then ilemalini=$(cat "$plik" | wc -l); fi # sprawdź ile ma teraz plik linii
while [ -z "$LINE" ]; do # cos tu trzeba zmienic (warunek)
if [ ! -f "$plik" ]; then
echo "Plik nie istnieje"
exit 1;
fi
LINE="$(sed -n ${linia}p "$plik")"
if [ ! -z "$LINE" ]; then # zmienić warunek ifa
# dorzucić ifa z granicami
let nrlinii=$linia-1
echo -e "$nrlinii\t$LINE"
echo
fi
if [ $ilemalini -lt $linia ]; then
echo -n "czekanie na kolejny pomiar";
sleep 1;
echo -ne "\r \r"
fi
done;
LINE=""
let linia+=1
#echo "Numer lini $nrlinii / dlugosc pliku $(cat pingowanie.txt | wc -l)"
#if [ ! $(cat pingowanie.txt | wc -l) -gt $nrlinii ]; then
# clear
# linia=1
#fi
# i ogólnie pozmieniać napisy
done
Te LINE będzie trzeba zamienić na coś związane z ilością linii pliku, ale jak pisałem po sesji się tym zajmę.
P.S: Skrypt jest stary i zawiera kilka literówek błędnych zapisów.