Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2014
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.84 KB | None | 0 0
  1. #!/bin/bash -x
  2.  
  3. thx="dzieki"
  4.  
  5. cd /home
  6. echo "Podaj nazwe katalogu do stworzenia:"
  7. read katalog
  8.  
  9.         if [ -d /home/$katalog ] ; then
  10.                 echo "Katalog o nazwie $katalog istnieje"
  11.         else
  12.  
  13. # 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:
  14. # mkdir: cannot create directory `t6': Permission denied
  15.  
  16.                 mkdir $katalog
  17.                 echo "Katalog o nazwie $katalog nie istnieje, ale utworzyłem go dla Ciebie mistrzu :)"
  18.         fi
  19.  
  20. cd $katalog
  21.  
  22. # a tu:
  23. # + cd t6
  24. # ./a: line 16: cd: t6: No such file or directory
  25.  
  26.  
  27. # 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.
  28.  
  29. # 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.
  30. # Trzeba to w cudzyslowy: "$katalog" albo lepiej: ${katalog}
  31.  
  32.  
  33. # ja bym zrobil tak:
  34.  
  35. # mkdir -p ${katalog}
  36. # cd ${katalog}
  37. # if [ $? != 0 ]; then
  38. #       echo "BLAD nie moglem wejsc do $katalog"
  39. # fi
  40. #
  41. # (mkdir -p nie protestuje jesli katalog juz istnieje; $? sprawdza status ostatnio wykonanej komendy, jak 0 to OK, jak niezerowy to byl blad)
  42.  
  43.  
  44. echo "Teraz tworzymy plik. Podaj nazwe pliku:"
  45. read plik
  46.  
  47.         if [ -e $plik ] ; then
  48. # wlasciwa flaga tutaj to -f . man bash:
  49. #       -e file
  50. #              True if file exists.
  51. #       -f file
  52. #              True if file exists and is a regular file.
  53. #       Plik na linuxie rownie dobrze moze byc urzadzeniem znakowym albo blokowym (dyskiem) a takich raczej nie ma sensu edytowac VIMem :-)
  54.  
  55.                 echo "Plik o nazwie $plik juz istnieje. Idziemy dalej"
  56.         else
  57.                 touch $plik
  58.                 echo "Plik o nazwie $plik nie istnieje, ale utworzylem go juz dla Ciebie :)"
  59. read thanks
  60.         until [ "$thanks" == "$thx" ]; do
  61.                 echo "Nie podziekowales! Podziekuj! Wystarczy zwykle slowo - dzieki:"
  62. read thanks
  63.         done
  64.                 echo "Bardzo prosze"
  65.         fi
  66. clear
  67.  
  68. echo "Kolejna czesc otwiera mozliwosc edycji utworzonego pliku. Wybierz opcje:"
  69.  
  70.         while [[ "$thanks" == "0" || "thanks" != "0" ]] ; do
  71.         echo "1. Edytuj plik - Vi Edytor"
  72.         echo "2. Usun plik"
  73.         echo "3. Wyjdz i nic nie rob"
  74.         read numer
  75.                 if [ "$numer" == "1" ];
  76.                 then
  77.                         echo "Wybrales Edycje - Vi Edytor "
  78.                         vi /home/$katalog/$plik
  79. # a dlaczego nie po prostu vi ${plik} ? nie wiesz w ktorym katalogu obecnie jest user. To jego biznes, niech skrypt dziala na biezacym katalogu.
  80.                 elif [ "$numer" == "2" ];
  81.                 then
  82.                         echo "Wybrales Usuniecie. Jestes pewny ze chcesz usunac?"
  83.                         echo "Potwierdz y lub Y nacisniecie innego klawisza spowoduje anulowanie"
  84.                         read y
  85.                                 if [[ "$y" == y || "$y" == Y ]];
  86.                                 then
  87.                                         rm /home/$katalog/$plik
  88.                                         # znowu sciezka
  89.                                         echo "Plik o nazwie $plik zostal usuniety. Wybierz kolejna opcje:"
  90.                                                 while [[ "$y" == y || "$y" == Y ]]; do
  91.                                                         echo "1. Utworz nowy plik"
  92.                                                         echo "2. Wyjdz"
  93.                                                         echo "Wybierz z powyzszego menu cyfre:"
  94.                                                         read nowy
  95.                                                         if [ "$nowy" == "1" ];
  96.                                                         then
  97.                                                                 echo "Podaj nazwe nowego pliku:"
  98.                                                                 read nazwa1
  99.                                                                         until  [ "$nazwa1" != "" ]; do
  100.                                                                                 echo "Nie oszukasz skryptu ;) Musisz podac nazwe pliku"
  101.                                                                         read nazwa1
  102.                                                                                 echo "Tworzysz nowy plik o nazwie: $nazwa1"
  103.                                                                                 touch /home/$katalog/$nazwa1
  104.                                                                         done
  105.                                                         elif [ "$nowy" == "2" ];
  106.                                                         then
  107.                                                                 echo "Nie tworzysz nic i wychodzisz"
  108.                                                                 exit
  109.                                                         elif [ "$nowy" == "0" ];
  110.                                                         then
  111.                                                                 echo "Nie podales nazwy pliku. Zrob to jeszcze raz!"
  112.                                                         else
  113.                                                                 clear
  114.                                                                 echo "Niepoprawny wybor! Wybierz jeszcze raz:"
  115.                                                         fi
  116.  
  117.                                                 done
  118.  
  119.                                         else
  120.                                 echo "Anulowales proces usuwania"
  121.  
  122.                                 fi
  123.                 elif [ "$numer" == "3" ];
  124.                 then
  125.                         echo "Wybrales opcje nr 3 - wyjscie. Dowidzenia. Zamknalem program."
  126.                         exit
  127.                 else
  128.                         echo "Nic nie wybrales! Musisz wybrac ktoras z cyfr:"
  129.                 fi
  130.         done
  131.  
  132. # Generalnie, powyzsze:
  133. # 1. w wypadkach wyboru z wielu opcji lepszy jest switch: http://stackoverflow.com/questions/5562253/switch-case-with-fallthrough
  134. # 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/
  135.  
  136.  
  137. # Ocena: jak na pierwszy skrypt, naprawde swietnie. Pod warunkiem ze napisales sam :-)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement