Skip to content

Instantly share code, notes, and snippets.

@844196
Last active August 29, 2015 14:19
Show Gist options
  • Save 844196/5fdbe552f997021e557a to your computer and use it in GitHub Desktop.
Save 844196/5fdbe552f997021e557a to your computer and use it in GitHub Desktop.
起動時、終了時にバックアップを取ってくれるスティーブ

BackUpRun.sh

SYNOPSIS

$ BackUpRun.sh

DESCRIPTION

基本的な動作はBackUpRun.batと変わりません。ただし設定ファイル名が以下のように変更されています。

  • BackUpRun_Config.batから.steverc

USAGE

BackUpRun.shに実行権限を付与し、実行してください。

AUTHOR

Masaya Tk (https://github.com/844196)

#!/bin/bash
#
# @(#) 起動時、終了時にバックアップを取ってくれるスティーブ
# Maintainer: 844196
# Original: keepoff07
#
set -e
steve_say() {
echo -en "
┌───────────┐
│ ┌─────────┤ ${1}
├─┘ rェュ rェュ │ ${2}
│ _l二l_ │ ${3}
┌─┴──┴──────┴─┴─┐
│ │ │ │
├──┤ ├──┤\n"
return 0
}
hello() {
clear
steve_say 'ようこそBackUpRunへ、' '案内役のスティーブです。'
echo '(Enterキーで次へ)'
read
clear
steve_say 'ここではBackUpRunの初期設定を行います。' 'もちろん設定は後から.stevercで変更出来ます。'
echo '(Enterキーで次へ)'
read
clear
steve_say 'まずは起動時にバックアップを行うか設定してください。' 'trueで有効、falseで無効、未入力なら毎回確認を行います。' '(文字を入力してEnterで決定)'
echo -n '> '
read COF_S
clear
steve_say '次に終了前にバックアップを行うか設定してください。' 'trueで有効、falseで無効、未入力なら毎回確認を行います。' '(文字を入力してEnterで決定)'
echo -n '> '
read COF_E
clear
steve_say '最後に現在使用しているサーバー起動用の' 'シェルスクリプトを指定してください。(例:RUN.sh' '(文字を入力してEnterで決定)'
echo -n '> '
read COF_B
clear
steve_say '設定は以上です。' 'この設定は.stevercが無い時だけ現れるので、' 'また会いたい方は.stevercを消してみましょう。'
echo '(BackUpRunを通常起動する)'
read
clear
}
output() {
if ! [ -f '.steverc' ]; then
hello
echo "
# バッチ起動時のバックアップ
# true=確認なしでバックアップをとる
# false(もしくはtrue以外の文字)=確認なしでバックアップはとらない
# (空白)=毎回確認
CreateBackup_onStart=${COF_S}
# サーバー停止時のバックアップ
# true=確認なしでバックアップをとる
# false(もしくはtrue以外の文字)=確認なしでバックアップはとらない
# (空白)=毎回確認
CreateBackup_onEnd=${COF_E}
# サーバー起動のシェルスクリプト名
# 半角スペースや一部特定の文字が含まれていると適応されないのでご注意ください
RUN_shellscript=${COF_B}" >.steverc
fi
}
check_server() {
if ! [ -s 'server.properties' ]; then
steve_say 'server.propertiesが見つかりませんでした' '本シェルスクリプトはserver.propertiesと' '同じ場所に置いて下さい'
echo '(Enterキーを押して終了します)'
read end
exit 1
fi
}
check_run() {
if [ -z "${RUN_shellscript}" ] || ! [ -e "${RUN_shellscript}" ]; then
steve_say '申し訳ないが' 'サーバー起動用のシェルスクリプトが見つからなかったよ' '.stevercを編集しておくれ'
echo '(Enterキーを押して終了します)'
read end
exit 1
fi
}
check_server_properties() {
level_name=$(cat ~/server.properties | grep 'level-name=' | sed -e "s/level-name=\(.*\)/\\1/g")
[ -d "${level_name}_nether" ] && level_nether="${level_name}_nether"
[ -d "${level_name}_the_end" ] && level_the_end="${level_name}_the_end"
}
backup() {
[ -d 'Backup' ] || mkdir Backup
mkdir -p "Backup/${2}"
cp -r "${1}" "./Backup/${2}/${1}"
}
backups() {
steve_say 'バックアップをクラフトするぞ'
backup_date=$(date +%Y-%m-%d_%H-%M-%S)
backup "${level_name}" "${backup_date}"
[ -n "${level_nether}" ] && backup "${level_nether}" "${backup_date}"
[ -n "${level_the_end}" ] && backup "${level_the_end}" "${backup_date}"
steve_say "終了だ [Backup/${backup_date}]"
}
q_create_backup() {
steve_say "${1}にワールドをバックアップするか?" "y:作成する" "n:作成しない"
echo -n '> '
while :;
do
stty raw
local answer=$(dd bs=1 count=1 2>/dev/null)
stty -raw
echo ''
case ${answer} in
[yY] )
backups
break
;;
[nN] )
break
;;
* )
steve_say '???'
esac
done
}
check_config_start() {
if [ "${CreateBackup_onStart}" = "true" ]; then
backups
elif [ -z "${CreateBackup_onStart}" ]; then
q_create_backup '起動前'
fi
}
check_config_end() {
if [ "${CreateBackup_onEnd}" = "true" ]; then
backups
elif [ -z "${CreateBackup_onEnd}" ]; then
q_create_backup '終わる前'
fi
}
main() {
check_server_properties
output
source .steverc
check_run
check_config_start
steve_say 'サーバーを起動するぞ'
./${RUN_shellscript}
check_config_end
steve_say 'おつかれさま' 'Enterキーを押せば終了するぞ'
read
}; main
#!/bin/bash
#
# @(#) 起動時、終了時にバックアップを取ってくれるスティーブ
# Maintainer: 844196
# Original: keepoff07
#
# License: WTFPL 2.0
#
readonly ME="${0##*/}"
readonly VERSION="0.2"
function messageError() { echo -e "${ME}: ${@}" 1>&2; }
function question_yn() {
echo -n "${@}"
while :;
do
stty raw
local answer=$(dd bs=1 count=1 2>/dev/null)
stty -raw
echo ''
case ${answer} in
[yY] )
return 0
break
;;
[nN] )
return 1
break
;;
* )
;;
esac
done
}
function checkWorldsDir() {
backup_dir=( "$(\
cat './server.properties' |\
grep 'level-name=' |\
sed -e "s/^level-name=\(.*\)$/\\1/g" \
)" )
[[ -z "${backup_dir[0]}" || ${?} -ne 0 ]] && { messageError 'world名を取得できませんでした'; exit 2; }
[[ -d "${backup_dir[0]}_nether" ]] && backup_dir+=( "${backup_dir[0]}_nether" )
[[ -d "${backup_dir[0]}_the_end" ]] && backup_dir+=( "${backup_dir[0]}_the_end" )
}
function backupDir() {
mkdir -p "Backup/${2}"
cp -r "${1}" "./Backup/${2}/${1}" >/dev/null 2>&1
}
function backupWorlds() {
backup_date=$(date +%Y-%m-%d_%H-%M-%S)
for world in "${backup_dir[@]}"
do
backupDir "${world}" "${backup_date}"
[[ ${?} -eq 0 ]] || { messageError "${world}のバックアップに失敗しました"; return 3; }
done
}
[[ -e 'server.properties' ]] || { messageError 'server.propertiesが存在しません'; exit 1; }
[[ -e '.steverc' ]] && source '.steverc' || { messageError '.stevercが存在しません'; exit 1; }
[[ -e "${RUN_shellscript}" ]] || { messageError 'サーバー起動スクリプトが存在しません'; exit 1; }
if [[ "${CreateBackup_onStart}" =~ [Tt][Rr][Uu][Ee] ]]; then
checkWorldsDir && backupWorlds
elif [[ -z "${CreateBackup_onStart}" ]]; then
question_yn '起動前にワールドをバックアップしますか? [y/n]:' && { checkWorldsDir && backupWorlds; }
fi
$(cd $(dirname ${RUN_shellscript}) && pwd)/$(basename ${RUN_shellscript})
if [[ "${CreateBackup_onEnd}" =~ [Tt][Rr][Uu][Ee] ]]; then
checkWorldsDir && backupWorlds
elif [[ -z "${CreateBackup_onEnd}" ]]; then
question_yn '終了前にワールドをバックアップしますか? [y/n]:' && { checkWorldsDir && backupWorlds; } || exit 0
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment