morg Napisano Marzec 26, 2009 Zgłoszenie Share Napisano Marzec 26, 2009 Cześć Zrobiłem skrypt instalujący wersje ale przez brak wiedzy rozpasałem się w tworzeniu plików. Poszedłem po rozum do głowy i chciałbym je połączyć w jeden plik w którym. poprzez menu, jest możliwość wywołania poszczególnych podmenu. Poprosiłbym również o wskazówki na przyszłość jak rozwijać to menu wraz z odwołaniem do (nie wiem czy to odpowiednie słowo) znacznika ? Oto menu: clear banner Instalator echo Aktualizacja bazy $serwer:$PWD baza: $baza. echo "" echo "Kontrola exe: $exe " echo "" echo "" echo "Wybierz z listy" echo "" select l in "Import" "Import uzupelnien" "Pelne wydanie" "Instalacja" "Pomoc" "Koniec pracy" do case "$l" in "Import ") ./start $@;; "Import uzupelnien" ) ./start_uzupelnienie $@;; "Pelne wydanie") ./start_exe $@;; "Instalacja exe") ./start_exe_exe $@;; "Pomoc") more pomoc.txt;; "Koniec pracy") exit;; esac break done I o to się rozchodzi, żeby te wszystkie pliki (start, start_uzupelnienie, start_exe, more pomoc.txt) połączyć w jakąś sensowną całość łącząc je w jednym pliku. Od razu mówie, że google, Bash Receptury, Linux - najlepsze przepisy - nie dają rozwiązań. Z góry dziekuję za pomoc. M. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Marzec 26, 2009 Zgłoszenie Share Napisano Marzec 26, 2009 Nie wiem, czy dobrze Cię zrozumiałem. Jeden skrypt, który ma menu i ładnie działa jak program? Zrobiłem sobie kiedyś taki skrypcik do filtrów adblock, może ten mechanizm Ci odpowiada. (Proszę się nie śmiać z "silniczka", wiem że to najdłuższa droga z możliwych ja tam na sed się nie znam). Zwróć uwagę na elif i funkcję filtr (samo wypełnienie jest dla Ciebie nie istotne, chodzi tylko o szkielet). #!/bin/bash # echo Please, enter your firstname and lastname # read NAME LAME # echo "Hi $NAME $LAME!" # plik żródłowy AD=adblock.txt # kopia dla bezpieczeństwa cp $AD $AD.org-$(date +%H.%M.%S.%N) # rozdzielone filtry mają rozszerzenie LOG=adlog # plik tymczasowy TMP=temp-$(date +%H.%M.%S.%N) function filtr { cat -s $AD | grep -i $1 >> $1.$LOG && cat -s $AD | grep -iv $1 > $TMP && cat $TMP > $AD } OPTIONS="Rozdziel Połącz Quit" select opt in $OPTIONS; do if [ "$opt" = "Quit" ]; then echo Bye Bye exit elif [ "$opt" = "Rozdziel" ]; then echo Wybrałeś Rozdziel # tu wypunktuj filtry filtr ! filtr .ru\# filtr .cn\# filtr .cz\# filtr @@ filtr helion filtr bbc.co.uk filtr howtogeek filtr howto filtr charaktery filtr devarticles filtr dobreprogramy filtr hacking filtr youtube filtr forum filtr edu filtr lifehack filtr osnews filtr google filtr hosting filtr wordpress filtr themes filtr avatar filtr virus # filtr \#div rm $TMP ls echo '... i po bólu'; elif [ "$opt" = "Połącz" ]; then echo Wybrałeś Połącz # [Adblock] cat *.$LOG > $TMP && cat $AD | grep -v 'Adblock' >> $TMP echo '[Adblock]' > $AD && cat -s $TMP |sort -u >> $AD rm $TMP rm -f *.$LOG echo '... i po bólu'; else echo Nie ma takiej opcji, wciśnij: 1, 2, 3... fi done Czy o to chodziło? [EDIT] Ja to chyba wziąłem z "Advanced Bash-Scripting Guide" (http://www.linuxdriver.co.il/resources). Nie pamiętam dokładnie, ale dodałem linki do tego na końcu artykułu http://wiki.fedora.pl/wiki/Podstawy_Linuksa Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morg Napisano Marzec 26, 2009 Autor Zgłoszenie Share Napisano Marzec 26, 2009 Dziekuję. Chyba trafiłeś w sedno!, Sprawdzę w domu i odezwę się za kilka dni. Pytanie o funkcjonalność. Po wybraniu opcji skrypt przejdzie do odpowiedniego kodu, wykona ciało procedury i zakończy działanie. Interesuje mnie jeszcze dojście do końca pliku i wykonanie procedury "Wysyłka". # Wysyłka rm -Rf powiadom.txt uname -n >serwer serwer=`cat serwer` echo "" >>powiadom.txt echo Wiadomosc wygenerowana automatycznie. Prosimy na nia nie odpowiadac >>powiadom.txt echo "" >>powiadom.txt echo "" >>powiadom.txt echo "" >>powiadom.txt echo W katalogu: >>powiadom.txt echo $serwer:/$PWD >>powiadom.txt echo "" >>powiadom.txt echo "" >>powiadom.txt echo zainstalowano : >>powiadom.txt echo W*.zip >>powiadom.txt echo "" >>powiadom.txt echo "" >>powiadom.txt echo "" >>powiadom.txt echo "" >>powiadom.txt echo "" >>powiadom.txt echo "" >>powiadom.txt tail -n$ilosc_linii wydr*/wer* >>powiadom.txt mutt -s "Informacja o nowej wersji w katalogu $serwer:/$PWD ." adres e-mail < powiadom.txt Coś a'la DOS'owe "goto". M. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Marzec 26, 2009 Zgłoszenie Share Napisano Marzec 26, 2009 Do wcześniejszego to tu gdzieś było http://www.tldp.org/guides.html , a co do goto to w bash nie ma. Zrób sobie z tego funkcje i pobaw się tak: http://tldp.org/LDP/Bash-Beginners-Guide/h...sect_09_05.html [EDIT] heh to chyba "Bash. Receptury" już nie kupię Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morg Napisano Marzec 27, 2009 Autor Zgłoszenie Share Napisano Marzec 27, 2009 Co robi funkcja filtr? function filtr { cat -s $AD | grep -i $1 >> $1.$LOG && cat -s $AD | grep -iv $1 > $TMP && cat $TMP > $AD } Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Marzec 27, 2009 Zgłoszenie Share Napisano Marzec 27, 2009 oj pisałem żebyś się zajął szkieletem, a nie moimi wypocinami. Ta funkcja to główny silniczek skryptu ale nie jest do niczego potrzebna w szkielecie skryptu. To po prostu wycina linijki z pliku i ładuje je do osobnego pliku np. filtr youtube wytnie linijki zawierające słówko "youtube" i zapisze je wszystkie do osobnego pliku youtube.adlog gdzie mogę spokojnie je przejrzeć. Moje filtry do adbock złożyłem ze wszystkich jakie znalazłem i... rozmiar pliku mnie przeraził. Skrypcik pozwolił mi łatwiej to oglądać. To taki mój "sed" tyle że mocno przekombinowany, ale działa. A działa tak: $AD - to mój plik z filtrami i dalej strumieniem leci: cat -s $AD | //pousuwaj nadmiar pustych linii grep -i $1 >> $1.$LOG // kopiuj linijki youtube i wrzycaj do youtube.adlog && cat -s $AD | //znowu pousuwaj puste linijki z tego co zostało (to chyba zbędne było) grep -iv $1 > $TMP // tym razem zapisz plik bez linijek youtube do temp. && cat $TMP > $AD // umieść odfiltrowana treść do głównego pliku z filtrami Tak wiem, młotkiem się wszystkiego nie robi, a ta funkcja 5!! razy przegląda plik który ma odfiltrować ...ale czad Działa, a to najważniejsze, może kiedyś to poprawię, pewnie w sed to będzie jedna linijka . Jak widzisz zawartość funkcji jest Ci zbędna, zrób własną. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morg Napisano Marzec 27, 2009 Autor Zgłoszenie Share Napisano Marzec 27, 2009 Tak wiem, młotkiem się wszystkiego nie robi, a ta funkcja 5!! razy przegląda plik który ma odfiltrować ...ale czad Działa, a to najważniejsze, może kiedyś to poprawię, pewnie w sed to będzie jedna linijka . Jak widzisz zawartość funkcji jest Ci zbędna, zrób własną. Rzuć okiem: http://forum.fedora.pl/index.php?showtopic=20130 Edit: I jeszcze mam pytanie bo w menu zawarte są linie ze spacjami, które nie są obsługiwane : Wykonanie: Wybierz z listy ./start: line 192: definicji Import: command not found [morg@gburdzy start_ciurkiem]$ Zawartość pliku: OPTIONS=" "Import definicji" "Import uzupelnien" " Rozwiązanie: #!/bin/bash # This script provides wisdom # You can now exit in a decent way. # FORTUNE=/usr/games/fortune # while true; do echo "On which topic do you want advice?" echo "1. politics lolo" echo "2. startrek armaga" echo "3. kernelnewbies" echo "4. sports" echo "5. bofh-excuses" echo "6. magic" echo "7. love" echo "8. literature" echo "9. drugs" echo "10. education" echo echo -n "Enter your choice, or 0 for exit: " read Opcja echo if [[ $Opcja == 6 ]] then echo 6 echo : Ciało procedury opcji 6 fi if [[ $Opcja == 7 ]] then echo 7 echo ciało procedury z opcji 7 fi Taki sposób działa. Dziekuję za pomoc M. 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ę