Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundację Dzieciom „Zdążyć z Pomocą”.
Więcej informacji na dug.net.pl/pomagamy/.

#1 2018-06-11 13:11:40

moro
Użytkownik
Zarejestrowany: 2016-04-27

pętla sprawdzająca warunek

Witam
Męczę się z napisaniem pewnego skrpytu. Stanąłem w miejscu w którym chcę sprawdzić  czy w danym katalogu jest jakiś pusty plik.
Może zacznę od początku jak to działa... skrypt "a" tworzy x pustych plikow nazwa.txt.. potem inny skrpyt uzupelnia te puste pliki wczesniej utworzone pobranymi danymi.
Może zdarzyć się sytuacja że któryś z tych plików pozostanie pusty i wtedy chciałbym uzyskać informację że nastąpiła taka sytuacji.
Dla potrzeb forum zamiast akcji przy warunkach wpisałem ok, nok.
OK ma być gdy wszystkie pliki w katalogu nie są puste
NOK gdy chociaż 1 plik jest pusty.

Mój problem polega na tym że wynikiem mojej pętli jest lista w której są wypisane informacje o każdym pliku a więc
ok
ok
warn
ok...

a nie pojedynczy wynik "ok" lub "warn". Czy mógłby mnie ktoś nakierować co robię źle?

Kod:

            for i in $tempdir/*.txt; do if [[ -s $i ]];
                    then echo ok
                    else echo warn
                fi
            done

Offline

 

#2 2018-06-11 13:24:44

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: pętla sprawdzająca warunek

Ustaw sobie pusty string na dzień dobry, a w pętli jak plik będzie pusty to wstaw do tego stringu np. "dupa" i wykonaj break.
po wyjściu z pętli sprawdź dupę...


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#3 2018-06-11 13:35:41

moro
Użytkownik
Zarejestrowany: 2016-04-27

Re: pętla sprawdzająca warunek

Nie ma jakiejś komendy która pozwoliłaby wyciągnąć stan tak/nie 0/1 prawda/falsz lub jakikolwiek inny z pętli?
Na zasadzie grep'owego if [ $? –eq 0 ]

Chciałbym zacząć pisać kod "zgodnie ze sztuką" a nie "obejściami". Równie dobrze mogę przeanalizować wynik jakimś grepem ale miałem nadzieję że są do tego gotowe instrukcje.

Ostatnio edytowany przez moro (2018-06-11 13:37:15)

Offline

 

#4 2018-06-11 13:43:39

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: pętla sprawdzająca warunek

A co Ci się nie podoba w moim rozwiązaniu?
Co jest niezgodne ze "sztuką" (czymkolwiek by ona nie była)?
Napisz i odpowiedź uzasadnij.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#5 2018-06-11 13:45:29

moro
Użytkownik
Zarejestrowany: 2016-04-27

Re: pętla sprawdzająca warunek

Nie wiem. Po prostu myślałem że można to wyciągnąć "bezpośrednio z pętli"

Wynik z tamtej pętli wrzuciłem do pliku i dopisałem jeszcze jedną pętle

Kod:

 cat /tmp/petla.txt | grep -i warn
                if [ $? -eq 0 ] ;
then echo warning
else echo ok

Ostatnio edytowany przez moro (2018-06-11 13:52:25)

Offline

 

#6 2018-06-11 14:54:40

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: pętla sprawdzająca warunek

No więc właśnie pokazałem Ci, jak to można wyciągnąć bezpośrednio z pętli... po cholerę jakieć caty i grepy jak wystarczy dupę powąchać, np:

Kod:

 if ["$string" = "dupa"]

Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#7 2018-06-11 17:03:03

wikingagressor
Użytkownik
Skąd: Józefów k.Błonia, mazowieckie
Zarejestrowany: 2015-02-03

Re: pętla sprawdzająca warunek

Jak dla mnie, to "wbrew sztuce" jest zalozenie, ze trzeba porownywac rozmiar plikow. Tworzenie plikow z zerowa zawartoscia nie jest ladnym rozwiazaniem. Nie lepiej byloby gdyby jeden skrypt tworzyl pliki z nazwami z pewnego klucza i wrzucal do nich potrzebne informacje. Drugi skrypt przeszukiwalby nazwy wedlug odpowiedniego klucza i wyswietlal / przetwarzal dane.


Peace, Love and Debian for the World!!!

Offline

 

#8 2018-06-11 17:10:43

Blackhole
Użytkownik
Skąd: Chorzów
Zarejestrowany: 2005-09-07
Serwis

Re: pętla sprawdzająca warunek

ethanak dobrze Ci radzi:

Kod:

dupa=0
for i in $tempdir/*.txt; do
   if [[ ! -s $i ]]; then
      dupa=1
   fi
done
if [ $dupa -eq 1 ]; then
   echo warn
else
   echo ok
fi

Ostatnio edytowany przez Blackhole (2018-06-11 17:12:10)


Ściskam prawicę, Jacek

http://doscniewoli.plPoznaj prawdę o pieniądzach
http://www.youtube.com/watch?v=BlhFK2Gc1Nw — cz. I

Offline

 

#9 2018-06-14 20:36:20

rulezdc
Członek DUG
Skąd: Tarnowskie Góry
Zarejestrowany: 2007-05-22

Re: pętla sprawdzająca warunek

Jest cos takiego:
-s FILE    FILE exists and it's size is greater than zero (ie. it is not empty).
sprawdzisz pliki a ktory nie wchodzi do warunku, kasacja

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)