Strona 1 z 1

Bash - pętla i sprawdzanie czy istnieje plik

: 27 listopada 2012, 22:09
autor: Karolus
Witam.

Chciałbym otrzymać pętlę, która sprawdza, czy istnieje plik. A więc:

Kod: Zaznacz cały

cd /home/.../
if [ -e server.log.lck ]
Z tym, że nie ma ona wykonywać zadań dopóki on istnieje lecz instrukcja ma się wykonać dopiero wtedy kiedy go już nie będzie.

Czyli:
  1. Sprawdza czy istnieje plik
  2. Jeżeli tak to nie robi nic, jeżeli nie to wywołuję instrukcję.
Jak mogę otrzymać coś takiego?

: 27 listopada 2012, 23:06
autor: modem

Kod: Zaznacz cały

#!/bin/bash


if [ ! -e /home/../server.log.lck ];
then
echo "gdy plik nie istnieje"
fi
I wrzuć do crona co jaki okres czasu ma sprawdzać.

: 27 listopada 2012, 23:30
autor: Karolus
Czyli, rozumiem, że to wykonuje tylko jeden cykl?
Tzn. raz sprawdza, a żeby sprawdziło dwa razy już musi być w cronie?

: 29 listopada 2012, 09:21
autor: LordRuthwen
A jak go chcesz wykonywać?
W pętli?
Cały czas?
Lepiej okresowo.

: 10 grudnia 2012, 11:45
autor: Yampress
Tak wrzuć do crona niech sprawdza co 5 minut. Chyba że potrzebujesz innej częstotliwości sprawdzania. Wtedy ustaw inaczej przedziały czasowe.

: 13 grudnia 2012, 19:00
autor: markossx
Ja bym zrobił tak:

Kod: Zaznacz cały

#!/bin/bash
FILE='/tmp/xxc'
function checkit() {
test -e $FILE &> /dev/null
}
while [ $? -eq 0 ];
   do
      checkit
      sleep 5
done
echo -e "File $FILE not found\nWhat next..?"


Dodane:

Możesz to uruchomić ze startem systemu lub "z ręki" i uruchomić w tle z opcją '&'.

Muszę dodać bo napisałem z pamięci, po sprawdzeniu okazuje się, że powinno być:

Kod: Zaznacz cały

#!/bin/bash -x
FILE='/tmp/xxc'
function checkit() {
sleep 5
test -e $FILE &> /dev/null
}
while [ $? -eq 0 ];
   do
      checkit
done
echo -e "File $FILE not found\nWhat next..?"