定期的に簡単なバックアップをする

スクリプト名: backup.sh
書式 : backup.sh バックアップ元ディレクトリ バックアップ先ディレクトリ 識別名
目的 : 簡単なバックアップをする
戻り値 : 成功:0 失敗:1 エラー:9

#!/bin/sh
. Error_Msg.sh && . Arg_Nums.sh && . Chk_File.sh || exit 9
Arg_Nums -eq 3 "$@" || exit 9

_FILE_NAME=$3-$(date +%Y%m%d).tar.gz

#ディレクトリが絶対パスか
for _DIR in "$1" "$2"; do
    _PATH_TYPE=$(echo "$_DIR" | cut -c1)
    [ $_PATH_TYPE != / ] && \ 
    { Error_Msg "$0" "Specify did not exist, or permission denied."; exit 1; }
done

Chk_File -drx "$1" || \
{ Error_Msg "$0" "$1: Directory did not exist, or permission denied."; exit 1;}

[ -e "$2" ] || \

    #mkdirのpオプションは中間ディレクトリを含めたディレクトリを作成する
    mkdir -p "$2" &> /dev/null || \
    { Error_Msg "$0" "$2: Permission denied."; exit 1; }
Chk_File -dwx "$2" || \
{ Erro_Msg "$0" "$2: Permission denied."; exit 1; }

[ -e "$2/$_FILE_NAME" ] && \
    { Error_Msg "$0" "$2/$_FILE_NAME already exists"; exit 1; }

#dirnameはパスからディレクトリ部分を取り出すが、
#引数がディレクトリの場合は親ディレクトリの絶対パスを取り出す
#バックアップ元の親ディレクトリに移動するのは余分な階層を作らないため
cd "$(dirname "$1")"
#tarのpオプションは許可属性や所有者などを極力保つ
#展開するときもpオプションを付ける
#basenameはパスからファイル名を取り出すが、
#引数がディレクトリの場合は親ディレクトリ部分を削除する
tar czpf "$2/$_FILE_NAME" "$(basename "$1")"
[ $? = 0 ] || exit 1