Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash -x
- thx="dzieki"
- cd /home
- echo "Podaj nazwe katalogu do stworzenia:"
- read katalog
- if [ -d /home/$katalog ] ; then
- echo "Katalog o nazwie $katalog istnieje"
- else
- # jak zrobie najpierw "cd /tmp" to stworzy katalog /tmp/$katalog; powyzej zrobiles cd /home, a zwykly user nie ma prawa tworzenia folderow w /home, wiec konczy sie:
- # mkdir: cannot create directory `t6': Permission denied
- mkdir $katalog
- echo "Katalog o nazwie $katalog nie istnieje, ale utworzyłem go dla Ciebie mistrzu :)"
- fi
- cd $katalog
- # a tu:
- # + cd t6
- # ./a: line 16: cd: t6: No such file or directory
- # Generalnie: nie rozsiewaj takich operacji w wielu miejscach bo moze byc zamotka z logika. W miare moznosci trzeba trzymac operacje na jednym obiekcie blisko siebie, a nie daleko - na poczatku skryptu dajesz cd, w innym miejscu mkdir, gdzie indziej cd. W jednym miejscu: cd gdzietrzeba; mkdir cochcemy; cd cochcemy; dalsze operacje. Inaczej masz efekty uboczne (side effects). Odstepstwa od takich zasad powinny byc jak musisz, nie normalnie. To sie tyczy kazdego jezyka programowania, rowniez Javy. Dlatego unika sie zmiennych globalnych.
- # Nastepna sprawa: $katalog rozwinie sie ze spacjami i jak zrobisz mkdir "ala ma kota dupa jas" to rozwinie to na 5 pol, a chcemy 1.
- # Trzeba to w cudzyslowy: "$katalog" albo lepiej: ${katalog}
- # ja bym zrobil tak:
- # mkdir -p ${katalog}
- # cd ${katalog}
- # if [ $? != 0 ]; then
- # echo "BLAD nie moglem wejsc do $katalog"
- # fi
- #
- # (mkdir -p nie protestuje jesli katalog juz istnieje; $? sprawdza status ostatnio wykonanej komendy, jak 0 to OK, jak niezerowy to byl blad)
- echo "Teraz tworzymy plik. Podaj nazwe pliku:"
- read plik
- if [ -e $plik ] ; then
- # wlasciwa flaga tutaj to -f . man bash:
- # -e file
- # True if file exists.
- # -f file
- # True if file exists and is a regular file.
- # Plik na linuxie rownie dobrze moze byc urzadzeniem znakowym albo blokowym (dyskiem) a takich raczej nie ma sensu edytowac VIMem :-)
- echo "Plik o nazwie $plik juz istnieje. Idziemy dalej"
- else
- touch $plik
- echo "Plik o nazwie $plik nie istnieje, ale utworzylem go juz dla Ciebie :)"
- read thanks
- until [ "$thanks" == "$thx" ]; do
- echo "Nie podziekowales! Podziekuj! Wystarczy zwykle slowo - dzieki:"
- read thanks
- done
- echo "Bardzo prosze"
- fi
- clear
- echo "Kolejna czesc otwiera mozliwosc edycji utworzonego pliku. Wybierz opcje:"
- while [[ "$thanks" == "0" || "thanks" != "0" ]] ; do
- echo "1. Edytuj plik - Vi Edytor"
- echo "2. Usun plik"
- echo "3. Wyjdz i nic nie rob"
- read numer
- if [ "$numer" == "1" ];
- then
- echo "Wybrales Edycje - Vi Edytor "
- vi /home/$katalog/$plik
- # a dlaczego nie po prostu vi ${plik} ? nie wiesz w ktorym katalogu obecnie jest user. To jego biznes, niech skrypt dziala na biezacym katalogu.
- elif [ "$numer" == "2" ];
- then
- echo "Wybrales Usuniecie. Jestes pewny ze chcesz usunac?"
- echo "Potwierdz y lub Y nacisniecie innego klawisza spowoduje anulowanie"
- read y
- if [[ "$y" == y || "$y" == Y ]];
- then
- rm /home/$katalog/$plik
- # znowu sciezka
- echo "Plik o nazwie $plik zostal usuniety. Wybierz kolejna opcje:"
- while [[ "$y" == y || "$y" == Y ]]; do
- echo "1. Utworz nowy plik"
- echo "2. Wyjdz"
- echo "Wybierz z powyzszego menu cyfre:"
- read nowy
- if [ "$nowy" == "1" ];
- then
- echo "Podaj nazwe nowego pliku:"
- read nazwa1
- until [ "$nazwa1" != "" ]; do
- echo "Nie oszukasz skryptu ;) Musisz podac nazwe pliku"
- read nazwa1
- echo "Tworzysz nowy plik o nazwie: $nazwa1"
- touch /home/$katalog/$nazwa1
- done
- elif [ "$nowy" == "2" ];
- then
- echo "Nie tworzysz nic i wychodzisz"
- exit
- elif [ "$nowy" == "0" ];
- then
- echo "Nie podales nazwy pliku. Zrob to jeszcze raz!"
- else
- clear
- echo "Niepoprawny wybor! Wybierz jeszcze raz:"
- fi
- done
- else
- echo "Anulowales proces usuwania"
- fi
- elif [ "$numer" == "3" ];
- then
- echo "Wybrales opcje nr 3 - wyjscie. Dowidzenia. Zamknalem program."
- exit
- else
- echo "Nic nie wybrales! Musisz wybrac ktoras z cyfr:"
- fi
- done
- # Generalnie, powyzsze:
- # 1. w wypadkach wyboru z wielu opcji lepszy jest switch: http://stackoverflow.com/questions/5562253/switch-case-with-fallthrough
- # 2. powyzsze to tzw. kod spaghetti: nie jest ustrukturyzowany, powinienes rozbic to na przynajmniej 2 funkcje. Funkcje: http://www.cyberciti.biz/faq/bash-shell-script-function-examples/
- # Ocena: jak na pierwszy skrypt, naprawde swietnie. Pod warunkiem ze napisales sam :-)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement