为什么这个 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 命令
这是一个压缩/解压缩文件的命令,它是针对一个文件执行的。

~~参考链接~~
[ gzip ] 命令 / [ gunzip ] 命令 -- 压缩/解压缩文件

if 语句(条件分支)
根据条件进行分支处理的语法

~~参考链接~~
if 语句和测试命令

条件表达式求值 [[~]]
评估条件表达式并根据结果返回退出状态。
它与测试命令略有不同。

~~参考链接~~
推荐shell脚本[[]]


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308629740.html

相关文章: