Freesco, NND, CDN, EOS

http://www.freesco.pl
Dzisiaj jest piątek, 19 kwietnia 2024, 06:34

Strefa czasowa UTC+2godz.




Nowy temat Odpowiedz w temacie  [ Posty: 10 ] 
Autor Wiadomość
 Tytuł: BASH: menu
Post: sobota, 12 sierpnia 2006, 18:08 
Offline

Rejestracja: wtorek, 21 marca 2006, 21:09
Posty: 70
: [/] [] ()
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?


Na górę
 Wyświetl profil  
 
 Tytuł: Re: BASH: menu
Post: sobota, 12 sierpnia 2006, 20:06 
Offline
MODERATOR

Rejestracja: piątek, 5 lipca 2002, 17:31
Posty: 2449
Lokalizacja: Londyn
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...

_________________
Mis'
___________________________________
"Real Men Use Telnet on port 80" (el bid)


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 13 sierpnia 2006, 11:35 
Offline

Rejestracja: wtorek, 21 marca 2006, 21:09
Posty: 70
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.


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 13 sierpnia 2006, 12:46 
Offline
MODERATOR

Rejestracja: piątek, 5 lipca 2002, 17:31
Posty: 2449
Lokalizacja: Londyn
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.


: [/] [] ()
#!/bin/sh


clear
FUNKCJA="main_menu"
until [  $WYBOR == 0 ]; do


ź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...

_________________
Mis'
___________________________________
"Real Men Use Telnet on port 80" (el bid)


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 13 sierpnia 2006, 15:19 
Offline

Rejestracja: wtorek, 21 marca 2006, 21:09
Posty: 70
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).


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 13 sierpnia 2006, 16:05 
Offline
MODERATOR

Rejestracja: piątek, 5 lipca 2002, 17:31
Posty: 2449
Lokalizacja: Londyn
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...

_________________
Mis'
___________________________________
"Real Men Use Telnet on port 80" (el bid)


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 13 sierpnia 2006, 16:58 
Offline

Rejestracja: wtorek, 21 marca 2006, 21:09
Posty: 70
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.


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 13 sierpnia 2006, 18:33 
Offline
Użytkownik

Rejestracja: wtorek, 13 sierpnia 2002, 11:27
Posty: 823
Lokalizacja: Lubliniec
tompl pisze:
...dla ludzi, nie majacych wiele wspolnego z linuxem, ...zeby...mogli banowac ludzi...


Hmmm... :|

_________________
Ludzie często, zamiast szukać prostych rozwiązań, komplikują sobie życie...


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 13 sierpnia 2006, 18:35 
Offline
MODERATOR

Rejestracja: piątek, 5 lipca 2002, 17:31
Posty: 2449
Lokalizacja: Londyn
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. :-)

_________________
Mis'
___________________________________
"Real Men Use Telnet on port 80" (el bid)


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 13 sierpnia 2006, 18:51 
Offline

Rejestracja: wtorek, 21 marca 2006, 21:09
Posty: 70
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 ;]


Na górę
 Wyświetl profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat Odpowiedz w temacie  [ Posty: 10 ] 

Strefa czasowa UTC+2godz.


Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 24 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Technologię dostarcza phpBB® Forum Software © phpBB Group
Hosting: Compus-Net
RobertKonik.pl