$ BackUpRun.sh
基本的な動作はBackUpRun.batと変わりません。ただし設定ファイル名が以下のように変更されています。
BackUpRun_Config.bat
から.steverc
へ
BackUpRun.sh
に実行権限を付与し、実行してください。
Masaya Tk (https://github.com/844196)
$ BackUpRun.sh
基本的な動作はBackUpRun.batと変わりません。ただし設定ファイル名が以下のように変更されています。
BackUpRun_Config.bat
から.steverc
へBackUpRun.sh
に実行権限を付与し、実行してください。
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 |