You are not logged in.
Hello community,
I was using Archlinux since few months and I was able to figure out most of the issues alone or/and by web searching, but now I need your help, so this is my first thread ;-)
Am trying to transform a simple bash script to a dialog/ncurses script to no avail. The main reason why I want to use dialog is -apart from the visual effect- the possibility to use different paths (source/destination), while this wont be possible with the simple script. My scripting skills are quite 'primitive'.
#!/bin/bash
##
## Rsync System Backup And Restore
## A try to implement an ncurses UI with dialog... Still not working... :(
#Set parameters
which dialog &> /dev/null
[ $? -ne 0 ] && echo "Install Dialog pkg to proceed!" && exit 1
which rsync &> /dev/null
[ $? -ne 0 ] && echo "Install rsync pkg to proceed!" && exit 1
##--------BEGIN "problematic zone"------------
Answer=$(mktemp /tmp/RsyncSelectOpt.XXXXXXX | xargs echo $? | cut -c3-)
SystemBackupDir=$(cat "$(mktemp /tmp/RsyncSystemBackupDir.XXXXXXX | xargs echo $? | cut -c3-)")
HomeBackupDir=$(cat "$(mktemp /tmp/RsyncHomeBackupDir.XXXXXXX | xargs echo $? | cut -c3-)")
HomeDir=$(cat "$(mktemp /tmp/RsyncHomeDir.XXXXXXX | xargs echo $? | cut -c3-)")
ExcludeFrom=$(cat "$(mktemp /tmp/RsyncExcludeFromLocation.XXXXXXX | xargs echo $? | cut -c3-)")
#Options
function SelectOption() {
dialog --backtitle "Rsync System Backup and Restore" --title "What do you want to do? Backup...Restore?" --menu "Select your option:" 15 50 6 1 "Backup Home" 2 "Backup System" 3 "Backup System and Home" 4 "Restore System" 5 "Restore Home" 6 "Quit" 2>"$Answer"
}
SelectOption;
A=$(cat $Answer)
case $A in
1) # "Backup Home" /home/ only.
dialog --backtitle "Backup Home" --title "ExcludeFrom File" --fselect $HOME/ 10 20 2>"$ExcludeFrom"
dialog --backtitle "Backup Home" --title "Which User Dir to backup?" --dselect $HOME/ 20 40 2>"$HomeDir"
dialog --backtitle "Backup Home" --title "Home Backup Destination" --dselect /run/media/ 20 40 2>"$HomeBackupDir"
dialog --backtitle "Rsync System Backup&Restore" --title "Backup Home" --infobox "Transfering Home\nPlease wait..." 10 20; sleep 2
rsync -aAXh --numeric-ids --info=progress2 --delete --exclude-from=$ExcludeFrom $HomeDir $HomeBackupDir
dialog --backtitle "Rsync System Backup&Restore" --title "Backup Home" --infobox "Home Backup finished." 5 30
break
;;
2) # "Backup System"
dialog --backtitle "System Backup" --title "System Destination" --dselect /run/media/ 10 50 2>"$SystemBackupDir"
dialog --backtitle "Rsync System Backup&Restore" --title "Backup System" --infobox 'Backing up the rootfs\nPlease wait...' 10 20; sleep 2
rsync -aAXHh --numeric-ids --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/home/*"} / $SystemBackupDir
dialog --backtitle "Rsync System Backup&Restore" --title "Backup System" --infobox 'System Backup finished!' 10 20
break
;;
3) # "Backup System AND Home"
dialog --backtitle "Backup Home" --title "ExcludeFrom File" --fselect $HOME/ 10 20 2>"$ExcludeFrom"
dialog --backtitle "Backup Home" --title "Which User Dir to backup?" --dselect /home/ 20 40 2>"$HomeDir"
dialog --backtitle "Backup Home" --title "Home Backup Destination" --dselect /run/media/ 20 40 2>"$HomeBackupDir"
dialog --backtitle "System Backup" --title "System Destination" --dselect /run/media/ 10 50 2>"$SystemBackupDir"
dialog --backtitle "Rsync System Backup&Restore" --title "Backup System AND Home" --infobox 'Backing up System\nPlease wait...' 10 30; sleep 2
rsync -aAXHh --numeric-ids --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/home/*"} / $SystemBackupDir
dialog --backtitle "Backup System AND Home" --title "Backup System" --infobox 'System Backup finished!' 10 20; sleep 2
dialog --backtitle "Backup System AND Home" --title "Backup Home" --infobox 'Backing up Home\nPlease wait...' 10 20; sleep 2
#Backup /home/ only.
rsync -aAXh --numeric-ids --info=progress2 --delete --exclude-from=$ExcludeFrom $HomeDir $HomeBackupDir
dialog --backtitle "Backup System AND Home" --title "Backup Home" --infobox "System and Home Backup finished" 5 40
break
;;
4) # "Restore System"
dialog --backtitle "Restore System" --title "System Restore From" --dselect /run/media/ 10 50 2>"$SystemBackupDir"
dialog --backtitle "Rsync System Backup&Restore" --title "Restore System" --infobox 'Restoring the rootfs\nPlease wait...' 10 30; sleep 2
rsync -aAXHh --numeric-ids --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/home/*"} $SystemBackupDir /
dialog --backtitle "Rsync System Backup&Restore" --title "Restore System" --infobox 'Restoring the rootfs finished!' 10 30; sleep 2
break
;;
5) # "Restore Home"
dialog --backtitle "Restore Home" --title "ExcludeFrom File" --fselect $HOME/ 10 20 2>"$ExcludeFrom"
dialog --backtitle "Restore Home" --title "Home Backup Location To Restore From" --dselect /run/media 20 40 2>"$HomeBackupDir"
dialog --backtitle "Restore Home" --title "Which User Dir to Restore?" --dselect /home/ 20 40 2>"$HomeDir"
dialog --backtitle "Rsync System Backup&Restore" --title "Restore Home" --infobox "Restoring Home\nPlease wait..." 10 30; sleep 2
#Restore /home/ only.
rsync -aAXh --numeric-ids --info=progress2 --delete --exclude-from=$ExcludeFile $HomeBackupDir $HomeDir #2>&1 >/dev/null
dialog --backtitle "Rsync System Backup&Restore" --title "Restore Home" --infobox 'Home Restore finished!' 5 40
break
;;
6) # "Quit"
dialog --backtitle "Rsync System Backup&Restore" --title "Cancelling" --infobox 'Cancelled, Nothing done!' 5 40
break
;;
# *) dialog --backtitle "Rsync System Backup&Restore" --title "Not a Valid Option" --infobox 'That was not a valid option\nTry it again!' 5 40; sleep 2; SelectOption;;
esac
dialog --backtitle "Rsync System Backup&Restore" --title "INFO" --infobox 'Task completed!' 5 30
find /tmp -maxdepth 1 -type f -iname "*Rsync*" -delete
##--------------- END "problematic zone"--------------------
##
################################################################################################################
## Here is the original version am still using
## based on: "https://de.manjaro.org/index.php?topic=1766.msg14473#msg14473"
HomeDir='/home/username/'
HomeBackupDir='/external/drive/mountpoint/username/
SystemBackupDir='/externel/drive/mountpoint/systembackup'
ExcludeFile='/home/username/pathtofile/'
##Select option:
PS3='Your choice: '
options=("Backup Home" "Backup System" "Backup System and Home" "Restore System" "Restore Home" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Backup Home")
echo --------------------------------------------------------------
echo Home Backup in progress.....
echo --------------------------------------------------------------
##Backup $HOME only.
rsync -aAXh --numeric-ids --info=progress2 --delete --exclude-from=$ExcludeFile $HomeDir $HomeBackupDir
echo --------------------------------------------------------------
echo '(°_°)' Home Backup finished.'(°_°)'
break
;;
"Backup System")
echo --------------------------------------------------------------
echo System Backup in progress.....
echo --------------------------------------------------------------
## Backup System (/) only
rsync -aAXHh --numeric-ids --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/home/*"} / $SystemBackupDir
echo --------------------------------------------------------------
echo '(°_°)' System Backup finished '(°_°)'
break
;;
"Backup System and Home")
echo ----------------------------------------------------------
echo '===> System Backup in progress (1/2)....'
echo ----------------------------------------------------------
##System backup, $HOME excluded
rsync -aAXHh --numeric-ids --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/home/*"} / $SystemBackupDir
echo ----------------------------------------------------------
echo '===> System Backup finished.'
echo ----------------------------------------------------------
##Backup $HOME directory
echo '===> Home Backup in progress (2/2)....'
echo ----------------------------------------------------------
rsync -aAXh --numeric-ids --info=progress2 --delete --exclude-from=$ExcludeFile $HomeDir $HomeBackupDir
echo ----------------------------------------------------------
echo Home Backup finished.
echo '======='
echo System and home Backup finished.
break
;;
"Quit")
echo ------------------------------------------------------------
echo "Cancelled, no changes made."
echo ------------------------------------------------------------
break
;;
"Restore System")
echo ----------------------------------------------------------
echo Restoring System....
echo ----------------------------------------------------------
##Restore System (/) $HOME excluded:
rsync -aAXHh --numeric-ids --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/home/*"} $SystemBackupDir /
echo ===========================================================
echo '(°_°)' System restored. '(°_°)'
break
;;
"Restore Home")
echo --------------------------------------------------------------
echo Restoring Home....
echo --------------------------------------------------------------
##Restore $HOME
rsync -aAXh --numeric-ids --info=progress2 --delete --exclude-from=$ExcludeFile $HomeBackupDir $HomeDir
echo ===========================================================
echo
echo '(°_°)' Home directory restored. '(°_°)'
echo
break
;;
*) echo Invalid choice;;
esac
done
echo ===========================================================
echo '(°_°)' Task completed. '(°_°)'
echo ===========================================================
#-------------------------------------------------[url]https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync[/url]--------------------------------------------------------------May be someone find it useful and want to use it too, at least the working part, so feel free to do whatever you like with it ![]()
Last edited by 0devnull0 (2016-09-01 23:14:29)
Offline
That manjaro section is written by someone with zero understanding of the Bash language. Using break statements with "case" is a dead giveaway. Don't base your script on it.
Anyway you can put it through shellcheck:
Or better, outline what exactly you're trying to achieve.
P.S. http://mywiki.wooledge.org/BashGuide
Last edited by Alad (2016-09-02 19:35:22)
Mods are just community members who have the occasionally necessary option to move threads around and edit posts. -- Trilby
Offline
Thanks Alad, the links were very helpful especially shellcheck.
What I want to do is to be able to choose what to backup and where to save the backup (locally). That was actually the problem, because I don't know
how to save source/destination and other variables to temporal files and use them later in the script...
This is what I come up with, am quite happy with it, the only problem (up till now) is when the dialog opens I select an item and hit enter, only the previous path
I set in the script is actually saved to the "tmpfile" not what I select. Example:
dialog --title "source" --dselect /home/ 10 15 2>"/tmp/UserDir_$(date +%d.%m.%Y)"It shows on the top '.' '..' and 'myusername'. I select then my username and hit enter, but what is saved is /home/ not /home/myusername.
#!/bin/env bash
## USAGE : SUDO PATH/TO/BACKUPD
## BACKUPD: A SYSTEM BACKUP AND RESTORE SCRIPT USING DIALOG
## Note : Some paths like path/to/file/toExcludeFrom and where/to/save/your/backups
## should be changed before runing the script
## WIKI : https://wiki.archlinux.org/index.php/Rsync
## https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync
# Set parameters
if ! which dialog &> /dev/null
then echo "Install Dialog pkg to proceed!" && exit 1
fi
if ! which rsync &> /dev/null
then echo "Install rsync pkg to proceed!" && exit 1
fi
Answer=/tmp/RsyncSelectOpt_$(date '+%Y-%m-%d-%H.%M.%S.%N'); touch "$Answer";
SystemBackupDir=/tmp/RsyncSystemBackupDir_$(date '+%Y-%m-%d-%H.%M.%S.%N'); touch "$SystemBackupDir";
HomeBackupDir=/tmp/RsyncHomeBackupDir_$(date '+%Y-%m-%d-%H.%M.%S.%N'); touch "$HomeBackupDir";
HomeDir=/tmp/RsyncHomeDir_$(date '+%Y-%m-%d-%H.%M.%S.%N'); touch "$HomeDir";
ExcludeFrom=/tmp/RsyncExcludeFrom_$(date '+%Y-%m-%d-%H.%M.%S.%N'); touch "$ExcludeFrom";
Args='-aAXHh --numeric-ids --info=progress2 --delete'
#Options
dialog --backtitle "RSYNC SYSTEM BACKUP AND RESTORE" --title "What do you want to do? Backup...Restore?" --menu "Select your option:" 15 50 6 \
1 "Backup Home" 2 "Backup System" 3 "Backup System and Home" 4 "Restore System" 5 "Restore Home" 6 "Quit" 2>"$Answer"
A=$(< "$Answer")
case $A in
1) # "Backup Home" (/home/ only).
dialog --backtitle "Backup Home" --title "ExcludeFrom File" --fselect /home/ 10 40 2>"$ExcludeFrom"
dialog --backtitle "Backup Home" --title "Which User Dir to backup?" --dselect /home/ 20 40 2>"$HomeDir"
dialog --backtitle "Backup Home" --title "Home Backup Destination" --dselect /run/media/$USER/ExtDrive/ 20 40 2>"$HomeBackupDir"
dialog --backtitle "RSYNC SYSTEM BACKUP AND RESTORE" --title "Backup Home" --infobox "Transfering Home\nPlease wait..." 10 20; sleep 2
rsync $Args --exclude-from="$(< $ExcludeFrom)" "$(< $HomeDir)" "$(< $HomeBackupDir)"
dialog --backtitle "RSYNC SYSTEM BACKUP AND RESTORE" --title "BACKUP HOME" --infobox "Home Backup finished." 5 30
;;
2) # "Backup System"
dialog --backtitle "System Backup" --title "System Destination" --dselect /run/media/$USER/ExtDrive/ 10 50 2>"$SystemBackupDir"
dialog --backtitle "RSYNC SYSTEM BACKUP&RESTORE" --title "Backup System" --infobox 'Backing up the rootfs\nPlease wait...' 10 30; sleep 2
rsync $Args --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/home/*"} / "$(< $SystemBackupDir)"
dialog --backtitle "RSYNC SYSTEM BACKUP&RESTORE" --title "Backup System" --infobox 'System Backup finished!' 10 20
;;
3) # "Backup System AND Home"
dialog --backtitle "Backup Home" --title "ExcludeFrom File" --fselect /home/ 10 40 2>"$ExcludeFrom"
dialog --backtitle "Backup Home" --title "Which User Dir to backup?" --dselect /home/ 20 40 2>"$HomeDir"
dialog --backtitle "Backup Home" --title "Home Backup Destination" --dselect /run/media/$USER/ExtDrive/ 20 40 2>"$HomeBackupDir"
dialog --backtitle "System Backup" --title "System Destination" --dselect /run/media/$USER/ExtDrive/ 10 50 2>"$SystemBackupDir"
dialog --backtitle "RSYNC SYSTEM BACKUP AND RESTORE" --title "Backup System AND Home" --infobox "Backing up System\nPlease wait..." 10 40; sleep 2
rsync $Args --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/home/*"} / "$(< $SystemBackupDir)"
dialog --backtitle "Backup System AND Home" --title "Backup System" --infobox 'System Backup finished!' 10 20; sleep 2
dialog --backtitle "Backup System AND Home" --title "Backup Home" --infobox "Backing up Home\nPlease wait..." 10 30; sleep 2
#Backup /home/ only.
rsync $Args --exclude-from="$(< $ExcludeFrom)" "$(< $HomeDir)" "$(< $HomeBackupDir)"
dialog --backtitle "Backup System AND Home" --title "Backup Home" --infobox "System and Home Backup finished" 5 40
;;
4) # "Restore System"
dialog --backtitle "Restore System" --title "Restore System From" --dselect /run/media/$USER/ExtDrive/ 10 50 2>"$SystemBackupDir"
dialog --backtitle "RSYNC SYSTEM BACKUP AND RESTORE" --title "Restore System" --infobox "Restoring the rootfs\nPlease wait..." 10 40; sleep 2
rsync $Args --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/home/*"} "$(< $SystemBackupDir)" /
dialog --backtitle "RSYNC SYSTEM BACKUP AND RESTORE" --title "Restore System" --infobox 'Restoring the rootfs finished!' 10 40; sleep 2
;;
5) # "Restore Home"
dialog --backtitle "Restore Home" --title "ExcludeFrom File" --fselect /home/ 10 40 2>"$ExcludeFrom"
dialog --backtitle "Restore Home" --title "Home Backup Location To Restore From" --dselect /run/media/$USER/ExtDrive/ 20 40 2>"$HomeBackupDir"
dialog --backtitle "Restore Home" --title "Which User Dir to Restore?" --dselect /home/ 20 40 2>"$HomeDir"
dialog --backtitle "RSYNC SYSTEM BACKUP AND RESTORE" --title "Restore Home" --infobox "Restoring Home\nPlease wait..." 10 40; sleep 2
#Restore /home/ only.
rsync $Args --exclude-from="$(< $ExcludeFrom)" "$(< $HomeBackupDir)" "$(< $HomeDir)"
dialog --backtitle "Rsync System Backup And Restore" --title "Restore Home" --infobox 'Home Restore finished!' 5 40
;;
6) # "Quit"
dialog --backtitle "RSYNC SYSTEM BACKUP AND RESTORE" --title "Cancelling" --infobox 'Cancelled, Nothing done!' 5 40
;;
esac
dialog --backtitle "RSYNC SYSTEM BACKUP AND RESTORE" --title "INFO" --infobox 'Task completed!' 5 30Offline