Freesco, NND, CDN, EOS http://forum.freesco.pl/ |
|
BASH: menu http://forum.freesco.pl/viewtopic.php?f=28&t=13203 |
Strona 1 z 1 |
Autor: | tompl [ sobota, 12 sierpnia 2006, 18:08 ] |
Tytuł: | BASH: menu |
main_menu(){ clear FUNKCJA="main_menu" WYBOR=`dialog --stdout --title "GŁÓWNE MENU ZARZˇDZANIA UŻYTKOWNIKAMI" \ --backtitle "$LOGO" --cancel-label "Anuluj" --radiolist \ "Wybierz jedn± z opcji:" 21 54 15 \ Jak nacisne ok bez wyboru opcji wychodzi, jak nacisne anuluj to jest to samo. Napisalem sobie te opcje w menu, niechcem ustawiac defaultowej na poczatku(poprzez "on"). Chc3m(co za idioztyzm z tym pisaniem !!!) zeby po nacisnieciu OK i nie majac zaznaczonej zadnej opcji wywalal blad, a po nacisnieciu anuluj wychodzil probowalem *) ale zawsze ANULUJ IDZIE TO TEGO POLECENIA . jak rozdzielic opcje anuluj od ok, bez wartosci na poczatku? |
Autor: | Mis' [ sobota, 12 sierpnia 2006, 20:06 ] |
Tytuł: | Re: BASH: menu |
tompl pisze: main_menu(){ clear FUNKCJA="main_menu" WYBOR=`dialog --stdout --title "GŁÓWNE MENU ZARZˇDZANIA UŻYTKOWNIKAMI" \ --backtitle "$LOGO" --cancel-label "Anuluj" --radiolist \ "Wybierz jedn± z opcji:" 21 54 15 \ Jak nacisne ok bez wyboru opcji wychodzi, jak nacisne anuluj to jest to samo. Napisalem sobie te opcje w menu, niechcem ustawiac defaultowej na poczatku(poprzez "on"). Chc3m(co za idioztyzm z tym pisaniem !!!) zeby po nacisnieciu OK i nie majac zaznaczonej zadnej opcji wywalal blad, a po nacisnieciu anuluj wychodzil probowalem *) ale zawsze ANULUJ IDZIE TO TEGO POLECENIA . jak rozdzielic opcje anuluj od ok, bez wartosci na poczatku? po pierwsze postaraj sie pisać po polsku... to ważne! po drugie zajrzyj do manuala dialogu, gdzieś na końcu o ile pamietam masz pokazane co dialog zwraca w efekcie różnych dzałań usera. po trzecie dodaj sprawdzanie zawartości zmiennej $WYBOR i w przypadku jeśli jest pusta wyświetl odpowiedni komunikat po czwarte możesz użyc pętli until... do... done i za każdym razem jesli zmienna jest pusta wracać do wyświetlania okna wyboru. Przy odrobinie chęci można dodać komunikat że zmienna jest pusta wyświetlany w oknie wyboru... |
Autor: | tompl [ niedziela, 13 sierpnia 2006, 11:35 ] |
Tytuł: | |
Mis' pisze: po trzecie dodaj sprawdzanie zawartości zmiennej $WYBOR i w przypadku jeśli jest pusta wyświetl odpowiedni komunikat if [ $WYBOR == ""];then LOGO="ERROR #1: Nie wybrales żadnej opcji ! Zaznacz ja spacj., a potem zatwierdz ENTER'EM" main_menu fi Jak nacisniesz ANULUJ wraca do glownego menu. Mis' pisze: po czwarte możesz użyc pętli until... do... done i za każdym razem jesli zmienna jest pusta wracać do wyświetlania okna wyboru. #!/bin/sh clear FUNKCJA="main_menu" until [ $WYBOR == 0 ]; do WYBOR=`dialog --stdout --title "GŁÓWNE MENU ZARZˇDZANIA UŻYTKOWNIKAMI" \ --backtitle "$LOGO" --cancel-label "Anuluj" --radiolist \ "Wybierz jedn± z opcji:" 21 54 15 \ "1" "ZOBACZ aktualnie zablokowane IP" "off" \ "2" "ODBLOKUJ adresy IP" "off" \ "3" "ZABLOKUJ adresy IP" "off" \ "4" "WYJ¦CIE z programu" "off" ` case $WYBOR in "1") echo "$WYBOR" > /home/tom/ccc ;; "2") echo "$WYBOR" > /home/tom/ccc ;; "3") echo "$WYBOR" > /home/tom/ccc22 ;; *) exit_menu ;; esac done To sobie sprawdz i pocnaciskaj ANULUJ, gowno ciagle jak naciskasz anuluj wraca do funkcji. Problem jest taki ze ANULUJ ma w czasie nacisniecia pusta wartosc, czyli musialbym nadac juz WYBOROWI wartosc domyslna, ale ona by byla ciagle stala i by jej nie zmienil....... Lepiej moim zdaniem dac w case warunek "")zeby wracal, ale ciagle wraca po nacisnieciu anuluj do glownego menu.... Mam jeszcze dwa pytaie: 1. jak pogrubic tekst? wiem ze: # empahsized (bolded) colors local EMK="\[\033[1;30m\]" local EMR="\[\033[1;31m\]" local EMG="\[\033[1;32m\]" local EMY="\[\033[1;33m\]" local EMB="\[\033[1;34m\]" local EMM="\[\033[1;35m\]" local EMC="\[\033[1;36m\]" local EMW="\[\033[1;37m\]" ale nie wiem jak to zastosowac i gdzie wstwic tekst. 2. jak wyciagnac za pomoca grep'a z /etc/hosts IP i nazwe hosta? probowalem cos kombinowac, ale bez skutecznie. |
Autor: | Mis' [ niedziela, 13 sierpnia 2006, 12:46 ] |
Tytuł: | |
tompl pisze: Mis' pisze: po trzecie dodaj sprawdzanie zawartości zmiennej $WYBOR i w przypadku jeśli jest pusta wyświetl odpowiedni komunikat if [ $WYBOR == ""];then LOGO="ERROR #1: Nie wybrales żadnej opcji ! Zaznacz ja spacj., a potem zatwierdz ENTER'EM" main_menu fi Jak nacisniesz ANULUJ wraca do glownego menu. chyba o to ci chodziło, prawda? albo ja nie rozumiem co chcesz uzyskac... Poza tym jesli chcesz żeby twoje okienko zachowywało się różnie dla różnych działań użytkownika to musisz każdą mozliwosć oprogramować. tompl pisze: Mis' pisze: po czwarte możesz użyc pętli until... do... done i za każdym razem jesli zmienna jest pusta wracać do wyświetlania okna wyboru. źle! po pierwsze znakiem == porównujesz stringi, a w możliwych opcjach nie widzę stringu 0, po drugie jeśli chodzi ci o to, żeby wracał jeśli zmienna $WYBOR jest pusta to raczej tak nalezałoby to zrobić: until [ $WYBOR != "" ]; do ... done[/i] albo while [ $WYBOR = "" ]; do ... done tompl pisze: WYBOR=`dialog --stdout --title "GŁÓWNE MENU ZARZˇDZANIA UŻYTKOWNIKAMI" \ --backtitle "$LOGO" --cancel-label "Anuluj" --radiolist \ "Wybierz jedn± z opcji:" 21 54 15 \ "1" "ZOBACZ aktualnie zablokowane IP" "off" \ "2" "ODBLOKUJ adresy IP" "off" \ "3" "ZABLOKUJ adresy IP" "off" \ "4" "WYJ¦CIE z programu" "off" ` case $WYBOR in "1") echo "$WYBOR" > /home/tom/ccc ;; "2") echo "$WYBOR" > /home/tom/ccc ;; "3") echo "$WYBOR" > /home/tom/ccc22 ;; *) exit_menu ;; esac done[/code] To sobie sprawdz i pocnaciskaj ANULUJ, gowno ciagle jak naciskasz anuluj wraca do funkcji. Problem jest taki ze ANULUJ ma w czasie nacisniecia pusta wartosc, czyli musialbym nadac juz WYBOROWI wartosc domyslna, ale ona by byla ciagle stala i by jej nie zmienil....... chyba nie zajrzałeś do manuala, jak ci radziłem. Mylisz wartość zmiennej $WYBOR z kodem wyjścia po naciśnięcie przycisku. Kod wyjścia sprawdzasz w zmiennej $?. zwróć uwagę że jest on kompletnie niezależny od tego czy twoja zmienna jest ustawiona czy nie. tompl pisze: Mam jeszcze dwa pytaie: 1. jak pogrubic tekst? wiem ze: # empahsized (bolded) colors local EMK="\[\033[1;30m\]" local EMR="\[\033[1;31m\]" local EMG="\[\033[1;32m\]" local EMY="\[\033[1;33m\]" local EMB="\[\033[1;34m\]" local EMM="\[\033[1;35m\]" local EMC="\[\033[1;36m\]" local EMW="\[\033[1;37m\]" ale nie wiem jak to zastosowac i gdzie wstwic tekst. na moim NND takie coś: echo -e "\033[1;30mala" wyświetla słowo "ala" w różnych kolorach (lub podkreślone) w zależności od liczby po średniku. sprawdzałem zakres od 29 do 40. Czy uda się uzyskać bold? nie wiem, ale kiedyś próbowałem w dialogu i bold akurat był niewidoczny. Być może to zależy od uzytego fontu konsolowego, ale nie sprawdzałem. UWAGA! W dialogu kolory uzyskuje się nieco inaczej.... tompl pisze: 2. jak wyciagnac za pomoca grep'a z /etc/hosts IP i nazwe hosta? probowalem cos kombinowac, ale bez skutecznie.
jak wiesz czego szukasz to po prostu: grep 'poszukiwany adres lub nazwa' /etc/hosts pokaże ci całą linię zawierającą szukany wzorzec. Napisz dokłądniej o co ci chodzi bo znów nie do końca cię rozumiem... |
Autor: | tompl [ niedziela, 13 sierpnia 2006, 15:19 ] |
Tytuł: | |
Mis' pisze: chyba nie zajrzałeś do manuala, jak ci radziłem. Mylisz wartość zmiennej $WYBOR z kodem wyjścia po naciśnięcie przycisku. Kod wyjścia sprawdzasz w zmiennej $?. zwróć uwagę że jest on kompletnie niezależny od tego czy twoja zmienna jest ustawiona czy nie. $? zwraca wartosc po nacisnieciu anuluj 1, a po OK 0 i tu moge cos podzialac z tym. Mis' pisze: pokaże ci całą linię zawierającą szukany wzorzec. Napisz dokłądniej o co ci chodzi bo znów nie do końca cię rozumiem...
Jak masz plik etc/hosts # /etc/hosts # Nie usuwaj następnej linii. Wiele programów # wymaga takiego wpisu do poprawnej pracy. #ipv6-localhost ipv6-loopback 127.0.0.1 localhost.localdomain localhost 192.168.0.1 www.dajtona.pl serwer 192.168.0.2 WINO 192.168.0.3 TOM .... To chce zeby pobieral IP'k z poczatkiem 192.168.0.XXX z nazwa hosta, a zapisywal do tablicy IP(n) i host(n). |
Autor: | Mis' [ niedziela, 13 sierpnia 2006, 16:05 ] |
Tytuł: | |
tompl pisze: $? zwraca wartosc po nacisnieciu anuluj 1, a po OK 0 i tu moge cos podzialac z tym. dokładnie tak. wciśnięcie ESC zwróci ci jeszcze inną wartość - jesli teraz chcesz żeby script reagował w zalezności od tego co user zrobi, musisz to wszytko przewidzieć i zaimplementować. Dla przykładu ci powiem, ze kiedy pisałem instalator do NND, to podstawowe funkcje zawierały się w ok 700 (o ile pamiętam) liniach kodu. Dodanie obsługi tego co user może zrobić zwiększyło script do ponad 1400 linii, a przecież tam nie ujest używany dialog i jeszcze sporo należałoby dodać... tompl pisze: Mis' pisze: Napisz dokłądniej o co ci chodzi bo znów nie do końca cię rozumiem... chce zeby pobieral IP'k z poczatkiem 192.168.0.XXX z nazwa hosta, a zapisywal do tablicy IP(n) i host(n). to chyba źle wybrałeś język do implementacji tego. Bash w najnowszych wersjach potrafi obsłużyć tablice, ale bardzo proste, jednowymiarowe. Czyli w tym wypadku musiałbyś mieć dwie tablice i cały czas dbać aby były zsynchronizowane... imho nienajlepszy pomysł. Nie piszesz co chcesz zobić z tymi danymi, ale przyjmuję że potrzebujesz pary adres_ip nazwa_hosta jednorazowo. W takiej sytuacji nie zawracałbym sobie głowy tablicami tylko czytał z pliku linię po linii i od razu robił to co mam z tymi danymi zrobić. Na przykład tak: while read line; do adres_ip=`echo "$line" | awk '!/^#/ {print$1}'` nazwa_hosta=`echo "$line" | awk '!/^#/ {print$2}'` echo "Host $nazwa_hosta ma adres $adres_ip" done < /etc/hosts Zwróć tylko uwagę, że w przypadku jeśli będą trzy pola a nie dwa możesz uzyskać nie do końca to co chcesz. Dlatego można by dodać sprawdzanie ile jest pól w linii i w zalezności od tego wyswietlać drugi lub trzecie pole w nazwie hosta. Dodatkowo będziesz musiał się pozbyć pustych lini... |
Autor: | tompl [ niedziela, 13 sierpnia 2006, 16:58 ] |
Tytuł: | |
Mis' pisze: Zwróć tylko uwagę, że w przypadku jeśli będą trzy pola a nie dwa możesz uzyskać nie do końca to co chcesz. Dlatego można by dodać sprawdzanie ile jest pól w linii i w zalezności od tego wyswietlać drugi lub trzecie pole w nazwie hosta.
Dodatkowo będziesz musiał się pozbyć pustych lini... Planuje napisac program dla ludzi, nie majacych wiele wspolnego z linuxem, myslalem zeby mogli wejsc poprzez puttiego, odpalili program i mogli banowac ludzi itp. A ze lubie kombinowac, wiec chcialem zeby program dynamicznie pobieral informacje o hostach. |
Autor: | adi [ niedziela, 13 sierpnia 2006, 18:33 ] |
Tytuł: | |
tompl pisze: ...dla ludzi, nie majacych wiele wspolnego z linuxem, ...zeby...mogli banowac ludzi...
Hmmm... ![]() |
Autor: | Mis' [ niedziela, 13 sierpnia 2006, 18:35 ] |
Tytuł: | |
tompl pisze: Planuje napisac program dla ludzi, nie majacych wiele wspolnego z linuxem, myslalem ... odpalili program i mogli banowac ludzi itp.
dobrze że nie eliminować... czeka cię trochę pracy. Powodzenia. Pamiętaj w manualach jest wszystko czego ci potrzeba. ![]() |
Autor: | tompl [ niedziela, 13 sierpnia 2006, 18:51 ] |
Tytuł: | |
Mis' pisze: tompl pisze: Planuje napisac program dla ludzi, nie majacych wiele wspolnego z linuxem, myslalem ... odpalili program i mogli banowac ludzi itp. dobrze że nie eliminować... czeka cię trochę pracy. Powodzenia. Pamiętaj w manualach jest wszystko czego ci potrzeba. ![]() trzeba kombinowac, moze mi sie uda cos zrobic. Dzieki za pomoc ;] |
Strona 1 z 1 | Strefa czasowa UTC+2godz. |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |