Potrzebuj

Potrzebujesz pomocy z C, C++, perl, python, itp.
mek
Posty: 7
Rejestracja: 31 maja 2015, 15:37

Potrzebuję pomocy przy skrypcie Backup

Post autor: mek »

Witam mam ogromną prośbę o pomoc w moim skrypcie . Muszę napisać skrypt do tworzenia backupu i do odzyskiwania . Udał mi się "chyba" napisać bo coś do końca nie działa czy mógłbym prosić o sprawdzenie i jeżeli są błędy o poprawienie:
Mój kod wygląda tak :

Kod: Zaznacz cały

#!/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 "choise2" in
A|a ) # save a backup in directory
tar -zcvf $NAZWA.tar.gz $Directory
echo "The backup has been created."
;;
B|b ) #choose where to save
echo "Please enter your choice where to save backup>"
read Directory2 #Deklaracja dgzie zapisac
NOW=$(date +"%F")
NAZWA="Backup-$NOW"
tar -zcvf $Directory2/$NAZWA.tar.gz $Directory  #NOW=$(date +"%F")
echo "The backup has been created ."
;;
* ) 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
Chciałbym jeszcze
1. żeby podstawowy katalog gdzie będzie zapysywany backup był w /home/user/backup
2. Jakie musi mieć uprawnienia skrypt żeby prawidlowo chodził .

Czekam z nie cierpliwością na pomoc
Pozdrawiam
Awatar użytkownika
dedito
Moderator
Posty: 3517
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Co nie działa ? Wrzuć jakieś wyniki działania. Opisz szerzej co nie działa.
Pytanie 1 niezrozumiałe. W końcu skrypt pyta o lokalizację. Można sobie ustawić jakiś default.
Pytanie 2 niezrozumiałe. Skrypt potrzebuje mieć atrybut wykonywalności.

Jeden błąd jest w przypadku zmiennej choice2. Pytasz o choice2 a sprawdzasz choise2.
mek
Posty: 7
Rejestracja: 31 maja 2015, 15:37

Post autor: mek »

dedito pisze:Co nie działa ? Wrzuć jakieś wyniki działania. Opisz szerzej co nie działa.
Pytanie 1 niezrozumiałe. W końcu skrypt pyta o lokalizację. Można sobie ustawić jakiś default.
Pytanie 2 niezrozumiałe. Skrypt potrzebuje mieć atrybut wykonywalności.

Jeden błąd jest w przypadku zmiennej choice2. Pytasz o choice2 a sprawdzasz choise2.
Powiem szczerze ze nie jestem dobry z linuxa i może tu jest problem nie wiem .
Problem jest taki ze nie tworzy mi ani katalogu ani backupu . Może coś żle wpisuje
jako katalog w którym ma zapisywać wpisuje /home/user/backup. Nadaje mu uprawnienia chmod 777 backup.sh . Czy po każdej zmianie w pliku trzeba zmieniać uprawnienia
pokazuje mi taki bląd

Kod: Zaznacz cały

Please enter a directory wher is the file you want s
/home/mek/backup/
tar (child): /home/mek/backup//.tar.gz: Nie można open: Nie ma takiego pliku ani katalogu
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

Awatar użytkownika
dedito
Moderator
Posty: 3517
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Co do poziomu wiedzy, to akurat Linux ma tu niewiele do rzeczy. To kwestia umiejętności władania językiem skryptowym.
Jak już pisałem masz błąd zmiennej choice2, popraw i wklej ponownie skrypt.
Nadanie uprawnień 777 daje tylko prawo wszystkim do modyfikacji skryptu czego zapewne nie chcesz w przypadku backupu.
Błąd który zamieściłeś wynika zapewne z błędów skryptu, ale to można stwierdzić dopiero po wklejeniu skryptu po poprawkach.
mek
Posty: 7
Rejestracja: 31 maja 2015, 15:37

Post autor: mek »

dedito pisze:Co do poziomu wiedzy, to akurat Linux ma tu niewiele do rzeczy. To kwestia umiejętności władania językiem skryptowym.
Jak już pisałem masz błąd zmiennej choice2, popraw i wklej ponownie skrypt.
Nadanie uprawnień 777 daje tylko prawo wszystkim do modyfikacji skryptu czego zapewne nie chcesz w przypadku backupu.
Błąd który zamieściłeś wynika zapewne z błędów skryptu, ale to można stwierdzić dopiero po wklejeniu skryptu po poprawkach.
Ok chodziło mi właśnie o język pisania skryptu . Więc tak jak mówiłeś poprawiłem to teraz jest tak :

Kod: Zaznacz cały

#!/bin/bash
#Przemyslaw Kurzynski


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."
;;
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 ."
;;
* ) 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 s"
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
czy możesz mi z tym pomóc bo naprawdę nie wiem już gdzie jest błąd i czemu to nie działa
Awatar użytkownika
dedito
Moderator
Posty: 3517
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Zapoznaj się z instrukcją case, choćby w innych miejscach "własnego" skryptu bo nadal źle sprawdzasz tą zmienną choice2.
http://dief.republika.pl/case.html
mek
Posty: 7
Rejestracja: 31 maja 2015, 15:37

Post autor: mek »

dedito pisze:Zapoznaj się z instrukcją case, choćby w innych miejscach "własnego" skryptu bo nadal źle sprawdzasz tą zmienną choice2.
http://dief.republika.pl/case.html
ok czyli btakowało " A|a"
teraz jest tak

Kod: Zaznacz cały

#!/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."
;;
"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 ."
;;
* ) 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 s"
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
Ale dalej poroblem
Awatar użytkownika
dedito
Moderator
Posty: 3517
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Ech, weź sobie porównaj instrukcje read i case we "własnym" skrypcie i znajdź różnice, bo dalej jest już tylko gotowiec.
mek
Posty: 7
Rejestracja: 31 maja 2015, 15:37

Post autor: mek »

A mógłbyś zrobić mi gotowca proszę bo już się gubię
Awatar użytkownika
dedito
Moderator
Posty: 3517
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

To nie jest forum gotowców.
Mała podpowiedź, brakuje symbolu $, gdzie to już sobie zgadnij.
Jak znasz bash to sobie poradzisz.
W ogóle to nie rozumiem po co tak zaawansowany skrypt na w sumie, jeśli dobrze liczę, dwie operacje - utworzenie kopii i przywrócenie kopii.
ODPOWIEDZ