Skocz do zawartości

Złączenie Kilku Plików W Jeden I Utworzenie Menu.


morg

Rekomendowane odpowiedzi

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

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

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

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 :lol: . Jak widzisz zawartość funkcji jest Ci zbędna, zrób własną.

Odnośnik do komentarza
Udostępnij na innych stronach

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 :lol: . 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

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ę
×
×
  • Dodaj nową pozycję...