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 Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

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

  moro - Użytkownik

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

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!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

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

  moro - Użytkownik

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

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!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

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

  moro - Użytkownik

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

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!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

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

  wikingagressor - Użytkownik

wikingagressor
Użytkownik
Skąd: Józefów k.Błonia, mazowieck
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

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

Re: pętla sprawdzająca warunek

[b]ethanak[/b] 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

[url]http://doscniewoli.pl[/url] — [b]Poznaj prawdę o pieniądzach[/b]
[url]http://www.youtube.com/watch?v=BlhFK2Gc1Nw[/url] — cz. I

Offline

 

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

  rulezdc - Członek DUG

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
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.009 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00009 SET CHARSET latin2
0.00005 SET NAMES latin2
0.00139 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.144.101.75' WHERE u.id=1
0.00081 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.144.101.75', 1732378607)
0.00039 SELECT * FROM punbb_online WHERE logged<1732378307
0.00046 SELECT topic_id FROM punbb_posts WHERE id=319746
0.00005 SELECT id FROM punbb_posts WHERE topic_id=30488 ORDER BY posted
0.00059 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30488 AND t.moved_to IS NULL
0.00006 SELECT search_for, replace_with FROM punbb_censoring
0.00139 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30488 ORDER BY p.id LIMIT 0,25
0.00105 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30488
Total query time: 0.00633 s