summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVon Random <von@vdrandom.org>2014-12-29 18:13:47 +0300
committerVon Random <von@vdrandom.org>2014-12-29 18:13:47 +0300
commitffe5c9ac16b73ee429f853494c9b355b296e6cb4 (patch)
treeee99f9427aa91930e202d1949c1f7b6a6cc863bb
parent31ba06126a6a5be1cb237e986bc5ef874c2e72e7 (diff)
some refactoring and err function fixes
-rwxr-xr-xbackup.zsh44
1 files changed, 27 insertions, 17 deletions
diff --git a/backup.zsh b/backup.zsh
index 5d7e64a..77a8980 100755
--- a/backup.zsh
+++ b/backup.zsh
@@ -2,6 +2,8 @@
self_name=$0
default_cfg='/usr/local/etc/backup.cfg'
default_postfix=$(date +%F-%H%M)
+default_ftp_port='21'
+default_ssh_port='22'
function err
{
@@ -26,10 +28,18 @@ function usage
function apply_config
{
source $cfg || err 15 'Config file does not exist'
- [[ -z $source_dirs ]] && { cfg_err 'Backup source'; exit 5 }
- [[ -z $remote_host ]] && { cfg_err 'Remote host'; exit 5 }
- [[ -z $protocol ]] && { cfg_err 'Backup protocol'; exit 5 }
- [[ -z $backup_dir && $protocol != 'ssh' ]] && { cfg_err 'Target directory'; exit 5 }
+ if [[ -z $source_dirs ]]; then
+ cfg_err 'Backup source'
+ exit 5
+ fi
+ if [[ -z $remote_host ]]; then
+ cfg_err 'Remote host'
+ exit 5
+ fi
+ if [[ -z $backup_dir && $protocol != 'ssh' ]]; then
+ cfg_err 'Target directory'
+ exit 5
+ fi
if [[ -z $local_host ]]; then
local_host=$HOST
fi
@@ -39,33 +49,34 @@ function apply_config
else
postfix=$outfile_postfix
fi
- if [[ -z $remote_port ]]; then
- case $protocol in
- ('ftp'|'ftps') remote_port='21';;
- ('sftp'|'ssh') remote_port='22';;
- ('local') unset remote_port;;
- (*) err 1 "$protocol is not a valid value for the protocol option.";;
- esac
+ case $protocol in
+ ('ftp'|'ftps') port=${remote_port:-$default_ftp_port};;
+ ('sftp'|'ssh') port=${remote_port:-$default_ssh_port};;
+ ('local') unset remote_port;;
+ (*) cfg_err 'Backup protocol'; exit 5;;
+ esac
+ if [[ ! $remote_port =~ ^[0-9]+$ ]]; then
+ err 'Remote port is not a numeric value.'
fi
case $compress_format in
('xz') compress_flag='J' ;;
('bz2') compress_flag='j' ;;
('gz') compress_flag='z' ;;
('') unset compress_flag; unset compress_format ;;
- (*) err 1 "$compress_format is not a valid value for the compression format option.";;
+ (*) err "$compress_format is not a valid value for the compression format option."; exit 5;;
esac
if [[ -n $exclude_list ]]; then
if [[ -r $exclude_list ]]; then
exclude_option='-X'
else
- err 1 "Exclusion list $exclude_list is either unreadable or does not exist."
+ err "Exclusion list $exclude_list is either unreadable or does not exist."
fi
fi
if [[ -n $snap_file ]]; then
if printf '' >> $snap_file; then
snapshot_option='-g'
else
- err 1 "Snapshot file $snap_file cannot be written."
+ err "Snapshot file $snap_file cannot be written."
fi
fi
}
@@ -96,9 +107,8 @@ function store # store to local or remote
{
case $protocol in
('local') dd of=$outfile ;;
- ('ssh') ssh -p$remote_port $remote_user@$remote_host "dd of=$outfile" ;;
- ('sftp'|'ftp'|'ftps') curl -ksS -T - $protocol://$remote_host:$remote_port/$outfile -u $remote_user:$remote_pass ;;
- (*) err 1 'Wrong protocol!' ;;
+ ('ssh') ssh -p$port $remote_user@$remote_host "dd of=$outfile" ;;
+ ('sftp'|'ftp'|'ftps') curl -ksS -T - $protocol://$remote_host:$port/$outfile -u $remote_user:$remote_pass ;;
esac
}