faja Napisano Kwiecień 23, 2008 Zgłoszenie Share Napisano Kwiecień 23, 2008 Mam skrypcik w sh. Mam w nim petle WHILE. W srodku tej petli definiuje zmienna. Jak zrobic by zmienna ta byla dostepna poza petla? Da sie tak? Pozdro Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
thof Napisano Kwiecień 23, 2008 Zgłoszenie Share Napisano Kwiecień 23, 2008 Zdefiniuj zmienną przed pętlą, a potem tylko z niej korzystaj w pętli (trochę taki strzał, bo nie pisałem nigdy skryptów w sh ) Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
faja Napisano Kwiecień 23, 2008 Autor Zgłoszenie Share Napisano Kwiecień 23, 2008 no wlasnie nie dziala;/ np: num=0 while cos tam do num=$(($num+1)) done echo $num wyswietla 0 tak jak to zostalo zdefiniowane na poczatku a nie np 3 (jesli petla przeszla 3 razy) export num=$(($num+1)) -tez nie pomaga;/ Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
thof Napisano Kwiecień 23, 2008 Zgłoszenie Share Napisano Kwiecień 23, 2008 Może w warunku masz błąd? Np. taki skrypt #!/bin/sh num=0 while [ $num -le 2 ]; do num=$(($num+1)) done echo $num No i wydruk to '3' czyli ok. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
faja Napisano Kwiecień 23, 2008 Autor Zgłoszenie Share Napisano Kwiecień 23, 2008 #!/bin/sh num=0; hostname=`hostname | cut -d'.' -f1`; pkg_info | while read line do name=$(echo $line | cut -f 1 -d " "); pkg_info -L $name | grep / | grep -vE "(null)|///" | while read file do if [ -e $file ]; then else msg="Host: $hostname\npacket: $name \nFile: $file - doesn't exits\n"; num=$(($num+1); fi; done done echo "---" echo $num echo -e $msg zmienna $msg (zawierajaca info o ostatnim pliku) nie zostaje wyswietlona tak samo zmienna $num - zawierajaca info o ilosci brakujacych plikow help Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
thof Napisano Kwiecień 23, 2008 Zgłoszenie Share Napisano Kwiecień 23, 2008 Niestety nie potrafie Ci pomóc, bo nawet nie wiem skąd się biorą warunki pętli read line, read file (zmienna $file w read file'u siedzi?). Może w przypadku $msg trzeba ją zainicjować przed pętlą, żeby potem móc wywołać (chociaż nie wiem czy przy zmiennych typu string jest to wymagane). Ewentualnie dla kosmetyki można ifa poprawić: if [! -e $file ] then msg="Host: $hostname\npacket: $name \nFile: $file - doesn't exits\n"; num=$(($num+1); fi Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
faja Napisano Kwiecień 24, 2008 Autor Zgłoszenie Share Napisano Kwiecień 24, 2008 Ok. Dzieki za pomoc. Zobaczymy, moze cos wykombinuje;) ___ a petla WHILE READ _zmienna_ to poprostu zapis do _zmiennej_ wartosci kazdego wersa po kolei az sie wersy nie skoncza np. masz pliczek o nazwie plik1 o takiej zawartosci "ALA MA KOTA YO" to mozna cat plik1 | while read zmienna do echo $zmienna done to za kazdym razem do zmiennej $zmienna beda zapisywyane wersy, najpierw ALA, potem MA, potem KOTA, potem YO. ______________________________ edit a widzisz zonk lezy w tym WHILE READ skrypt: #!/bin/sh num=0 while [ $num -le 2 ]; do num=$(($num+1)) done echo $num wyswietla 3 ale #!/bin/sh num=0 cat test | while read wers # gdzie test ma 3 wersy do num=$(($num+1)) done echo $num wyswietla 0;/ Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
faja Napisano Kwiecień 24, 2008 Autor Zgłoszenie Share Napisano Kwiecień 24, 2008 YEAH!!;] http://wooledge.org:8000/BashFAQ#faq24 #!/bin/sh num=0 cat test | ( while read wers # gdzie test ma 3 wersy do num=$(($num+1)) done echo $num ) wszystko o glupi potok chodzilo;p pozdro EDIT no albo;] jesli te potoki tak bardzo przeszkadzaja;] #!/bin/sh num=0 a=`cat test` for wers in $a do num=$(($num+1)) done echo $num Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Lukasz69 Napisano Kwiecień 30, 2008 Zgłoszenie Share Napisano Kwiecień 30, 2008 A w sh mozna wywolywac programy jak w bash? Jesli tak to proponowalbym programik wc - ma mozliwosc liczenia linii a chyba o to chodzi? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się