koralm Napisano Wrzesień 22, 2006 Zgłoszenie Share Napisano Wrzesień 22, 2006 walcze z jedna rzecza i nie moge tego zrobic ani nigdzie znalesc odpowiedzi, nawet nie wiem co szukac. a problem tkwi w: ifconfig | grep eth | awk '{print $1}' i teraz chce sobie pokozystac ze zmiennych $1 $2 $3 ale jak pod tym poleceniem dam echo $1 to pojawia mi sie pusty wiersz. jak uzywac zmiennych w nastepnych poleceniach tego samego skryptu?? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Wrzesień 22, 2006 Zgłoszenie Share Napisano Wrzesień 22, 2006 a problem tkwi w: ifconfig | grep eth | awk '{print $1}' i teraz chce sobie pokozystac ze zmiennych $1 $2 $3 ale jak pod tym poleceniem dam echo $1 to pojawia mi sie pusty wiersz. jak uzywac zmiennych w nastepnych poleceniach tego samego skryptu?? A chcesz korzystac ze zmiennych awk czy parametrów podawanych do skryptu? Bo tak sie, jak zapewne wiesz, nieszczesliwie sklada, ze $1 dla skryptu jest parametrem a dla awk pierwszym polem aktualnie przetwarzanego rekordu Podany przez Ciebie przyklad ifconfig | grep eth | awk '{print $1}' wypisuje pierwsze pola z polecenia ifconfig ze wszystkich linijek zawierajacych string "eth" (domyslnie separatorem awk jest "bialy" znak - spacja lub tabulacja). Jesli to polecenie wpisales do skryptu powloki (bash, sh, ksh) i w nastepnej linii wywolujesz echo $1 to skrypt próbuje wypisac pierwszy z podanych parametrów skryptu Zawile chyba tlumacze, ale wywolaj swój skrypt w ten sposób nazwa_skryptu.sh TRALALA W efekcie powinienes zobaczyc na ekranie TRALALA. A dlaczego nic nie widzisz na ekranie? Prawdopodobnie uruchamiasz skrypt jak zwykly user. ifconfig wypisuje wtedy "bash: ifconfig: command not found" a ten lancuch nie zawiera lancucha "eth" Stad pustka na ekranie Co zrobic zeby korzystac z wyników linijki ifconfig | grep eth | awk '{print $1}'? Przy zalozeniu, ze robisz to juz jako uprawniony uzytkownik (czyli root) wystarczy zapisac to do zmiennej skryptu MOJA_ZMIENNA=`ifconfig | grep eth | awk '{print $1}'` echo $MOJA_ZMIENNA UWAGA! uzyc nalezy "odwrotnych" apostrofów. Przed ifconfig i na koncu linijki uzylem znaku, który zazwyczaj jest umieszczony na tym samym klawiszu co tylda "~", tuz nad klawiszem "TAB". Pozdr, W. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
koralm Napisano Wrzesień 22, 2006 Autor Zgłoszenie Share Napisano Wrzesień 22, 2006 wszystko robie jako root. dziala tak jak napiasales ZMIENNA=..... a teraz pytanko: co jesli mam 3 zmienne? eth0, eth1, eth2 chce manipulowac wszystkimi. moze ja zle plumacze moj problem chodzi o to ze z wyniku polecenia ktory otrzymam, czyli, napisy eth0, eth1 chce miec jako zmienne. czy to bedzie $1 czy $mordka5 to mi nie robi zadnej roznicy, tylko zebym mogl tym mielic do woli. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Wrzesień 22, 2006 Zgłoszenie Share Napisano Wrzesień 22, 2006 wszystko robie jako root. dziala tak jak napiasales ZMIENNA=..... a teraz pytanko: co jesli mam 3 zmienne? eth0, eth1, eth2 chce manipulowac wszystkimi. moze ja zle plumacze moj problem chodzi o to ze z wyniku polecenia ktory otrzymam, czyli, napisy eth0, eth1 chce miec jako zmienne. czy to bedzie $1 czy $mordka5 to mi nie robi zadnej roznicy, tylko zebym mogl tym mielic do woli. No jak masz trzy to robisz ZM1=.... grep eth0..., ZM2=....grep eth1... itd i odwołujesz się rzecz jasna przez $ZM1, $ZM2... Wiesz co? Najlepiej to podaj ten skrypt tutaj (jak długi, to w znacznikach 'codebox' nie 'code') bo inaczej to będziemy do jutra gadać i się nie dogadamy. Jeśli robisz jako root to powinno coś na ekran wywalić. Jak zobaczę to się mogę chwilę pobawić. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
koralm Napisano Wrzesień 22, 2006 Autor Zgłoszenie Share Napisano Wrzesień 22, 2006 jak mam podac skrypt skoro go jeszcze (_niema_ → nie ma) ORT ifconfig.... to pierwsza linijka i wybilo mnie z rytmu $1 $2, a skrypt docelowo ma sprawdzac jakie interfejsy sa odpalone, jak ktoregos bedzie brakowac to ma restartowac wszystkie interfejsy (service network restart). dlaczego? bo naszla mnie taka wizja, gdyz jeden z interfejsuw dziala jako klient dhcp i czasem nie chce pobrac adresu a ze chce sie troszke pobawic to walcze:P Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Wrzesień 22, 2006 Zgłoszenie Share Napisano Wrzesień 22, 2006 a skrypt docelowo ma sprawdzac jakie interfejsy sa odpalone, jak ktoregos bedzie brakowac to ma restartowac wszystkie interfejsy (service network restart). dlaczego? bo naszla mnie taka wizja, gdyz jeden z interfejsuw dziala jako klient dhcp i czasem nie chce pobrac adresu To chyba samo "grep eth" nie pomoże, bo w ten sposób nie sprawdzisz które są UP a które DOWN, które mają adres a które nie. Rozumiem z tego co piszesz, że to tylko wprawki, ale u mnie polecenie ifconfig | grep eth | awk '{print $1}' daje w wyniku "eth0" (bez żadnego echo czy inne takie) więc dziwne, że u Ciebie jest w ogóle pusto. Z "palca", z linii komend próbowałeś to wpisać? Też nic? a ze chce sie troszke pobawic to walcze:PHehe, rozumiem Skrypty shellowe jakoś lubię i też lubię się pobawić. Powodzenia. Jakby co to pisz, jak będę umiał - pomogę. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
koralm Napisano Wrzesień 22, 2006 Autor Zgłoszenie Share Napisano Wrzesień 22, 2006 u mnie jest tak: [root@localhost tmp]# ifconfig | grep eth | awk '{print $1}' eth0 eth1 [root@localhost tmp]# i teraz by sie przydalo to miec jako zmienne. bo ni choroby nie moge tego zrobic. podam jako przyklad cos innego. czarowalem cos takiego: find /home -name '.hushlogin' -exec rm -f {} \; -exec echo {} >> ~/users.hush \; w/w poleceniu wynik wyszuania jest wykorzystany idelanie do tego co chcialem. natomiast z "eth" nie moge tego zczarowac. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Wrzesień 22, 2006 Zgłoszenie Share Napisano Wrzesień 22, 2006 u mnie jest tak: [root@localhost tmp]# ifconfig | grep eth | awk '{print $1}' eth0 eth1 [root@localhost tmp]# Tak na szybko (produced by Badziewiakowie Co. ) to może tak: ZM=`ifconfig | grep eth | awk '{print $1}'` ZM1=`echo $ZM | awk '{ print $1 }'` ZM2=`echo $ZM | awk '{ print $2 }'` echo "To jest interfejs $ZM1" echo "To jest interfejs $ZM2" Oczywiście to tylko dla 2 i-fejsów. Jeśli więcej lub zmienna liczba (to chyba bez sensu? ) to trzebaby jakąś pętelkę zawinąć. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
koralm Napisano Wrzesień 22, 2006 Autor Zgłoszenie Share Napisano Wrzesień 22, 2006 o cos mniej wiecej takiego mi chodzilo: ZM=`ifconfig | grep eth | awk '{print $1}'` ZM1=`echo $ZM | awk '{ print $1 }'` ZM2=`echo $ZM | awk '{ print $2 }'` if [ "$ZM1" == "eth0" ] then echo "To jest interfejs $ZM1" >> /dev/null else service network restart fi if [ "$ZM2" == "eth1" ] then echo "To jest interfejs $ZM2" >> /dev/null else service network restart fi jeszcze to musze dopracowac. restart sieci jest powtorzony bo czasami mi nie wstaje eth0. jeszcze to dopracuje, dajac np. pinga i jak "host nieznany to da drugi restart", a jak bedzie ping to ok. i to cos do crona Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Wrzesień 22, 2006 Zgłoszenie Share Napisano Wrzesień 22, 2006 restart sieci jest powtorzony bo czasami mi nie wstaje eth0.Można chyba jeszcze badać czy interfejs dostał IP. Nie jestem pewien, bo nie mam jak sprawdzić, ale tak na mój rozum to może być pewniejsze. I zapętlasz aż się pojawi IP. Ewentualnie jakiś timeout albo określona ilośc prób w pewnych odstępach czasu (sleep 3?), żeby się w niesprzyjających warunkach nie robiło w nieskończoność. Powodzenia W. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
koralm Napisano Wrzesień 22, 2006 Autor Zgłoszenie Share Napisano Wrzesień 22, 2006 chroba, nastepne schody sie zaczely:P daje takie cos: ping -c 1 wp.pl co przy wylaczonej sieci wyrzuca mi blad: ping: unknown host wp.pl i teraz chcialem to troszke podczerpac: ping -c 1 wp.pl | awk '{print $2,$3}' tyle ze cos nie dziala myslalem jeszcze nad daniem ping -c 1 wp.pl 2> ................ ale co dalej?? co do IP to ma ale nie dziala, robie tak: [root@localhost tmp]# ifconfig eth0 down [root@localhost tmp]# ifup eth0 Ustalanie informacji IP dla eth0... niepowodzenie. aha i tu problem: route [root@localhost tmp]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 * 255.255.255.0 U 0 0 0 eth1 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U 0 0 0 eth1 <--- nie bardzo wiem co to za ufo? i brakuje jednej linijki: default router_neo 0.0.0.0 UG 0 0 0 eth0 router_neo = 192.168.1.1 ktora sie pojawia dopiero po restarcie sieci:P moze oleje pinga i dobiore sie od tej strony:P sprawdze czy jest ten problem jak nie wstaanie eth0 po restarcie wersja alpha: --cut-- #!/bin/bash ZM=`ifconfig | grep eth | awk '{print $1}'` ZM1=`echo $ZM | awk '{ print $1 }'` ZM2=`echo $ZM | awk '{ print $2 }'` if [ "$ZM1" == "eth0" ] then echo "$ZM1 ok" else service network restart fi ruting=`route | awk '{print $2}' | sed -e '1,5d'` if [ "$ruting" == "192.168.1.1" ] then echo "net ok" else service network restart fi --cut-- Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
koralm Napisano Wrzesień 27, 2006 Autor Zgłoszenie Share Napisano Wrzesień 27, 2006 Nastepny problem ze zmienna. np. do zmiennej USERS mam przyporzadkowana liczbe userow, jednym razem jest ich 5 innym razem 50. echo $USERS nie rozwiazuje mi problemu jak to rmozmontowac za pomoca petli for? ewentulanie innej petli jesli sie w ogóle da to zrobic?? zastanawialem sie nad dodaniem polecenia seq tyle ze neimam wizji urzeczywistnienia mojego pomyslu. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Wrzesień 27, 2006 Zgłoszenie Share Napisano Wrzesień 27, 2006 echo $USERS nie rozwiazuje mi problemu Dlaczego? Czy to wynika z tego co piszesz o "rozmontowaniu?jak to rmozmontowac za pomoca petli for? ewentulanie innej petli jesli sie w ogóle da to zrobic??Może:echo $USERS | awk ' { for (i = 1; i <= NF; i++) { print $i } } ' to oczywiście tylko wypisuje "rozmontowane" nazwy po jednej w wierszu, ale mozna każdy z tych wierszy przechwycic i poddać dalszej obróbce. Nie wiem czy to o to Ci chodziło? No i to nie jest "czysty" skrypt shellowy, ale nie ma raczej uniksa bez awk. [Edit]Na wszelki wypadek słowo wyjaśnienia: NF to wbudowana zmienna awk przechowująca ilość pól w aktualnie przetwarzanym rekordzie. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
koralm Napisano Wrzesień 27, 2006 Autor Zgłoszenie Share Napisano Wrzesień 27, 2006 za chwile poprubuje twojego rozwiazania. a miedzy czasie zboczylem troszke na tablice. i wyczarowalem takie cos: # Wczytanie tablicy userow zalogowanych na FTP for fus in `ftpwho | sed -e '1d' | awk '{print $1,$2,$4,$5}' | sed -n -e 's/]//p' | awk '{print $2}'`; do x=`expr $x + 1` FTP_U[$x]=$fus[$x] done # Wyswietlenie tablicy userow zalogowanych na FTP for z in `seq $x`; do echo ${FTP_U[$z]} z=`expr $z + 1` done i teraz pytanie jak zaadresowac tablice dwuwymiarowa? chce otrzymac cos na zasadzie [1,1] nastepna pozycja [2,1] itp. bo majac 4 zmienne wrzuce sobie to do tablicy i bedzie fajniej Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
koralm Napisano Wrzesień 27, 2006 Autor Zgłoszenie Share Napisano Wrzesień 27, 2006 --edit-- ok rozwiazalem. skrypt dostepny w "przydatne skrypty" moze ktos bedzie mial pomysl jak go rozwinac lub porawic. 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ę