为什么这个 shell 脚本...?
我创建它是因为我需要在应用模块之前备份所有目标层次结构。
下面是动静。
① 通过论据决定支持哪个目标。
(2) 归档目标。
③ 压缩归档文件。
参数在其他 shell 中实现,以便用户可以选择。
Shell 脚本内容
执行环境:CentOS Linux 7 (Core)
放置 c 部分 p。嘘
#!/bin/bash
# 画面クリア
clear
# /*-------------------------------------------------------------------------*/
# /*変数定義 */
# /*-------------------------------------------------------------------------*/
# バックアップ先を変数に格納
BACKUP_MAIN="/work/test/BackUp/main/"
BACKUP_BRANCH="/work/test/BackUp/branch/"
# 定義場所を変数に格納
MAIN="/work/test/Def/main/"
BRANCH="/work/test/Def/branch/"
# リターンコード変数の初期設定
RC1=""
RC2=""
# /*-------------------------------------------------------------------------*/
# /*バックアップ取得 */
# /*-------------------------------------------------------------------------*/
# シェルの第一引数を基にバックアップ対象を判断(引数は別シェルで選択させるようにする)
echo ""$1"のバックアップを取得します。"
echo "-------------------------------------------------------------"
# バックアップ対象をパターンごとに分けて分岐させる(case文)
case $1 in
# バックアップ対象が "MAIN" の場合
"MAIN")
# バックアップ対象をアーカイブする(コマンド結果表示は、"/dev/null"で非表示)
tar chf "$BACKUP_MAIN"main_bk.tar "$MAIN" > /dev/null 2>&1
# リターンコードでアーカイブ処理が正常に行われたか判断(条件分岐(if文)で実施)
RC1=$?
if [[ $RC1 -eq 0 ]]; then
# アーカイブ処理が正常終了ならば、ZIP化を実施(コマンド結果表示は、"/dev/null"で非表示)
gzip -f "$BACKUP_MAIN"main_bk.tar > /dev/null 2>&1
# リターンコードでZIP処理が正常に行われたか判断(条件分岐(if文)で実施)
RC2=$?
if [[ $RC2 -eq 0 ]]; then
# ZIP処理が正常終了ならば、対象ZIPファイルを表示
cd "$BACKUP_MAIN"
ls -l main_bk.tar.gz
# ZIP処理が異常終了ならば、失敗をユーザーにお知らせ
else
echo "(MAIN)-ZIP化に失敗"
fi
# アーカイブ処理が異常終了なら、ZIP処理を行わずに失敗をユーザーにお知らせ
else
echo "(MAIN)-アーカイブに失敗"
fi
;;
# バックアップ対象が "BRANCH" の場合
"BRANCH")
# バックアップ対象をアーカイブする(コマンド結果表示は、"/dev/null"で非表示)
tar chf "$BACKUP_BRANCH"branch_bk.tar "$BRANCH" > /dev/null 2>&1
# リターンコードでアーカイブ処理が正常に行われたか判断(条件分岐(if文)で実施)
RC1=$?
if [[ $RC1 -eq 0 ]]; then
# アーカイブ処理が正常終了ならば、ZIP化を実施(コマンド結果表示は、"/dev/null"で非表示)
gzip -f "$BACKUP_BRANCH"branch_bk.tar > /dev/null 2>&1
# リターンコードでZIP処理が正常に行われたか判断(条件分岐(if文)で実施)
RC2=$?
if [[ $RC2 -eq 0 ]]; then
# ZIP処理が正常終了ならば、対象ZIPファイルを表示
cd "$BACKUP_BRANCH"
ls -l branch_bk.tar.gz
# ZIP処理が異常終了ならば、失敗をユーザーにお知らせ
else
echo "(BRANCH)-ZIP化に失敗"
fi
# アーカイブ処理が異常終了なら、ZIP処理を行わずに失敗をユーザーにお知らせ
else
echo "(BRANCH)-アーカイブに失敗"
fi
;;
# シェルの第一引数が想定外の引数だった場合、ユーザーにお知らせ
*)
echo "引数が間違っています。"
RC1=1
RC2=1
;;
esac
# /*-------------------------------------------------------------------------*/
# /* 終了処理 */
# /*-------------------------------------------------------------------------*/
# リターンコードを基に処理が正常終了したか判断(条件分岐(if文)で実施)
if [[ $RC1 -eq 0 && $RC2 -eq 0 ]]; then
# 正常終了の場合、正常終了をユーザーにお知らせし、リターンコード0で終了
echo "-------------------------------------------------------------"
echo ""$1"のバックアップ取得がが正常終了しました。"
exit 0
# 異常終了の場合、異常終了をユーザーにお知らせし、リターンコード1で終了
else
echo "-------------------------------------------------------------"
echo ""$1"のバックアップ取得が異常終了しました。"
exit 1
fi
Shell脚本执行结果
要备份的文件列表
[root@localhost:/work/test/Def]# ls -lR
.:
合計 0
drwxr-xr-x. 2 root root 42 10月 15 11:38 branch
drwxr-xr-x. 2 root root 42 10月 15 11:39 main
./branch:
合計 0
-rw-r--r--. 1 root root 0 10月 15 11:38 test.file1
-rw-r--r--. 1 root root 0 10月 15 11:38 test.file2
./main:
合計 0
-rw-r--r--. 1 root root 0 10月 15 11:38 test.file3
-rw-r--r--. 1 root root 0 10月 15 11:39 test.file4
备份目的地
[root@localhost:/work/test/BackUp]# ls -lR
.:
合計 0
drwxr-xr-x. 2 root root 6 10月 15 14:32 branch
drwxr-xr-x. 2 root root 6 10月 15 14:33 main
./branch:
合計 0
./main:
合計 0
运行 shell(尝试将参数设置为“MAIN”)
[root@localhost:/work/test]# ./BackUp.sh MAIN
结果(备份获取)
MAINのバックアップを取得します。
-------------------------------------------------------------
-rw-r--r--. 1 root root 187 10月 15 14:43 main_bk.tar.gz
-------------------------------------------------------------
MAINのバックアップ取得がが正常終了しました。
检查获取的备份文件的内容(正确获取)
[root@localhost:/work/test/BackUp]# ls -lR
.:
合計 0
drwxr-xr-x. 2 root root 6 10月 15 14:32 branch
drwxr-xr-x. 2 root root 28 10月 15 14:43 main
./branch:
合計 0
./main:
合計 4
-rw-r--r--. 1 root root 187 10月 15 14:43 main_bk.tar.gz
[root@localhost:/work/test/BackUp]# gzip -cd ./main/main_bk.tar.gz | tar tf -
work/test/Def/main/
work/test/Def/main/test.file3
work/test/Def/main/test.file4
归档失败时(失败 1)
MAINのバックアップを取得します。
-------------------------------------------------------------
(MAIN)-アーカイブに失敗
-------------------------------------------------------------
MAINのバックアップ取得が異常終了しました。
ZIP 转换失败时(失败 2)
MAINのバックアップを取得します。
-------------------------------------------------------------
(MAIN)-ZIP化に失敗
-------------------------------------------------------------
MAINのバックアップ取得が異常終了しました。
如果参数是意外值(失败 3)
xxxのバックアップを取得します。
-------------------------------------------------------------
引数が間違っています。
-------------------------------------------------------------
xxxのバックアップ取得が異常終了しました。
关于本次使用的命令和语法
清除命令
清屏命令
~~参考链接~~
[clear] command -- 清除终端
案例陈述
为每个模式分离字符串并分支处理。
~~参考链接~~
【Shell脚本】(条件分支)case语句
焦油命令
将多个文件合并为一个并创建/提取“存档文件”的命令
~~参考链接~~
[ tar ] 命令 -- 创建/提取存档文件
gzip 命令
这是一个压缩/解压缩文件的命令,它是针对一个文件执行的。
if 语句(条件分支)
根据条件进行分支处理的语法
~~参考链接~~
if 语句和测试命令
条件表达式求值 [[~]]
评估条件表达式并根据结果返回退出状态。
它与测试命令略有不同。
~~参考链接~~
推荐shell脚本[[]]
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308629740.html