Nowe posty

Autor Wątek: Prośba o pomoc ze skryptem Backup  (Przeczytany 1839 razy)

mek

  • Gość
Prośba o pomoc ze skryptem Backup
« dnia: 2015-06-01, 12:04:08 »
Witam . Na wstępie powiem ze jestem początkującym w pisaniu scryptów. Muszę napisać scrypt który będzie robił backup i w którym będzie można przywracać z kopi pliki .
Napisałem coś takiego ale niestety nie działa. Czy jest ktoś kto pomoże mi w tym bo już nie mam pomysłu co jest nie tak ;-(   . Mój kod jest taki :
#!/bin/bash

function choiceA () # Create a backup
{
echo "________________________"
echo "You chose to create a backup, please enter your directory:"
read Directory

if [ -d "$Directory" ]; #cheking directory exist
then
echo "Chose where to save your backup"
echo "A. Default directory."
echo "B. Chosedi rectory."
read choice2

case "$choice2" in
"A|a" ) # Save a backup in directory
tar -zcvf $NAZWA.tar.gz $Directory
echo "The backup has been created in default directory."
;;
"B|b" ) #choose where to save
echo "Please enter your choice where to save backup>"
read Directory2 #Deklaracja gdzie zapisac
NOW=$(date +"%F")
NAZWA="Backup-$NOW"
tar -zcvf $Directory2/$NAZWA.tar.gz $Directory  # NOW=$(date +"%F")
echo "The backup has been created in chose directory."
;;
* ) echo "Please enter a vaild input."
;;

esac

else
echo "This directory does not exit."
fi
}

function choiceB () #restore a backup
{
echo " You choose to restore a backup."
echo " Where would you like to save your restore file."
echo "A. Default backup diretory."
echo "B. Choose directory."
read choice3  #Declare variable

case "$choice3" in
A|a )
tar -zxvf $NAZWA.tar.gz
echo "The backup has been restored"
;;
B|b )
echo "Please enter a directory wher is the file you want save"
read Directory3 # Declare Variable
tar -zxvf $Directory3/$NAZWA.tar.gz
echo "The backup has restored."
;;
* )
echo "Please enter a valid input."
;;
esac
} #End function
function choiceC () #Exit the menu
{
echo "You chose to exit the Menu."
}

function display_menu ()
{
clear #clear all commends

echo " Welcome to the program for creating backup and restore her.If you want to exit the program, click the C"
exit="false"

while [ "$exit" = "false" ]
do
 
echo "A. Default directory."
echo "B. Choose directory."
echo "_______________________" #list menu option
echo "what is your option?"
echo "A. Create a backup"
echo "B. Restore a backup."
echo "C. Quit"
read choice
# See what the user has chooseen
case "$choice" in
A|a ) choiceA # Start function A
;;
B|b ) choiceB # start function B
;;
C|c ) choiceC #start function Q
     exit
     exit="true"
;;
*) echo "Please enter a valid input."  # if the user enter not valid input
;;
esac
done
}

echo "Please type m to display the menu " # start to the menu
read startmenu
while [ "$startmenu" = "m" ]
do
display_menu # start function display_menu
done

if [ "$startmenu" != "m" ]
then
echo "You didin't type m. The program is closing."
echo "_____________________________"
fi #end of if
pozdrawiam Mek

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Prośba o pomoc ze skryptem Backup
« Odpowiedź #1 dnia: 2015-06-01, 15:03:18 »
Nikt tu nie odrabia zadań domowych

ale, że dziś dzień dziecka:

1. Jest taka magiczna sprawa jak wcięcia/indentation, czas się nauczyć i stosować. Kodu wyżej praktycznie nie da się czytać.

2. Totalnie nie ogarniasz czegoś, co nazywa się przepływem sterowania/control flow:

* Używasz zmiennych przed ustawieniem ich wartości (np gdzie ustawiasz a gdzie używasz zmiennej NAZWA w choiceA/choiceB, zwłaszcza gałąź a|A)

* W przywracaniu totalnie nie ogarniasz rozróżnienia skąd chcesz przywrócić i dokąd chcesz zapisać przywrócone pliki. Polecenia na ekranie sugerują drugie a program robi pierwsze. Generalnie polecenia na ekranie są mocno mylące (a absolutnie nie wnikam w sprawy arcyokrutnej ortografii, bo nie o to pytasz) i user czasami nie wie, co ma wpisać. Na przykład w funkcji display_menu - klawisz A to "Default directory" czy "Create a backup", bo z menu nie wynika?

* Kompletnie nie ogarniam ostatniej pętli (ze $startmenu). Czemu ma służyć przy takiej kolejności echo/read/while/if?

* Poczytaj o zmiennych lokalnych/local variables, żeby uniknąć pierdyliona zmiennych choice/choice2/choice3 itd.

* Bash odpalony z parametrem -x działa jak swego rodzaju debugger, wyświetlając po kolei wszystko co robi. Łatwiej wtedy szukać błędów.

OT: Dundee ma kilka mniej stresujących kierunków niż CS...
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2769
  • 1709
    • Zobacz profil
Prośba o pomoc ze skryptem Backup
« Odpowiedź #2 dnia: 2015-06-02, 03:58:57 »
W pierwszej funkcji dales nawiasy "A|a"
Cytuj
case "$choice2" in
"A|a" ) # Save a backup in directory
potem na koncu
Cytuj
case "$choice" in
A|a ) choiceA # Start function A
Na koncu case działa bo nie dałes cudzyslowia,
case w funkcji
      function choiceA () # Create a backup
 trza poprawić.
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

mek

  • Gość
Prośba o pomoc ze skryptem Backup
« Odpowiedź #3 dnia: 2015-06-02, 10:31:53 »
Cytat: tele
W pierwszej funkcji dales nawiasy "A|a"
Cytuj
case "$choice2" in
"A|a" ) # Save a backup in directory
potem na koncu
Cytuj
case "$choice" in
A|a ) choiceA # Start function A
Na koncu case działa bo nie dałes cudzyslowia,
case w funkcji
      function choiceA () # Create a backup
 trza poprawić.
Jak dam nawiasy w
case "$choice" in 
A|a ) choiceA # Start function A
;;
B|b ) choiceB # start function B
;;
C|c ) choiceC #start function Q
     exit
     exit="true"
to program przestaje działać.
Napisałeś że muszę zmienić
function choiceA () # Create a backup

a czy możesz pokazać dokładnie jak to powinno wyglądać bo tak jak pisałem jestem początkujący i za bardzo już nie wiem jak to powinno wyglądać .
Wiem że forum nie jest od tego żeby ktoś za mnie to robił no ale utknąłem na tym i już naprawdę nie wiem jak to uruchomić . Czy mógłbyś poprawić mi ten skrypt i wrzucić tak jak powinien wyglądać żeby działał proszę

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2769
  • 1709
    • Zobacz profil
Prośba o pomoc ze skryptem Backup
« Odpowiedź #4 dnia: 2015-06-02, 11:11:31 »
Zle mnie zrozumiales ,
tfu...,
 chcialem napisac bez cudzyslowia
to one ci zepsuly pierwsza funkcje która nie dziala,
a dokładniej case,
a dokladniej zawsze gdy wpisales a lub b
miałes  "Please enter a vaild input."

Fragment poprawiony, bez cudzyslowiów / wi
case "$choice2" in
A|a ) # Save a backup in directory
tar -zcvf $NAZWA.tar.gz $Directory
echo "The backup has been created in default directory."
;;
B|b ) #choose where to save
echo "Please enter your choice where to save backup>"
read Directory2 #Deklaracja gdzie zapisac
NOW=$(date +"%F")
NAZWA="Backup-$NOW"
tar -zcvf $Directory2/$NAZWA.tar.gz $Directory  # NOW=$(date +"%F")
echo "The backup has been created in chose directory."
;;
* ) echo "Please enter a vaild input."
;;

esac
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

mek

  • Gość
Prośba o pomoc ze skryptem Backup
« Odpowiedź #5 dnia: 2015-06-02, 12:30:28 »
ok Dzięki ruszyło  !!!!