Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Prośba o pomoc ze skryptem Backup  (Przeczytany 1826 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: 3056
  • 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: 2765
  • 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: 2765
  • 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  !!!!