1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【シェルスクリプト⑤】世代管理/バックアップ対象をユーザーに選択させるシェルスクリプト

Posted at

なぜこのシェルスクリプトを・・・?

対象を固定して、ユーザーに選択させる必要があったため。
これで画面ありシェルスクリプトに近づく・・・。

動きとしては、下記です。
① 対象を選択させる。
② 選んだ対象を基に、世代管理を実施する。
③ 選んだ対象を基に、バックアップを実施する。

シェルスクリプトの内容

実行環境:CentOS Linux 7 (Core)

GeneBk.sh
#!/bin/bash

# 画面クリア
clear

# /*-------------------------------------------------------------------------*/
# /*対象選択・確認                                                           */
# /*-------------------------------------------------------------------------*/

# 世代管理/バックアップ対象をユーザーに選択させる
while [[ $TARGET1 -ne 4 ]]; do

  echo "世代管理とバックアップを行う対象を入力してください。"
  echo "----------------------------------------"
  echo " MAIN  なら [1] を入力"
  echo "BRABCH なら [2] を入力"
  echo " 終了  なら [3] を入力"
  echo "----------------------------------------"
  read -p "-> " TARGET1

  case $TARGET1 in
    "1")
        read -p "対象は【MAIN】で正しいでしょうか? [y/n] -> " check
        
        if [[ $check = "y" || $check = "Y" ]]; then
          TARGET2=MAIN
          TARGET1=4
          clear
        else
          read -p "再度選択してください。(Enter)" push
          clear
        fi
        ;;
    "2")
        read -p "対象は【BRANCH】で正しいでしょうか? [y/n] -> " check
        
        if [[ $check = "y" || $check = "Y" ]]; then
          TARGET2=BRANCH
          TARGET1=4
          clear
        else
          read -p "再度選択してください。(Enter)" push
          clear
        fi
        ;;
    "3")
        read -p "処理を終了します。(Enter)" push
        clear
        exit 0
        ;;
      *) 
        TARGET1=0
        read -p "値が違います、再度選択してください。(Enter)" push
        clear
        ;;
  esac

done

# /*-------------------------------------------------------------------------*/
# /* 世代管理(3世代管理)開始                                                 */
# /*-------------------------------------------------------------------------*/

# 再編処理開始
if /work/test/gene.sh ${TARGET2}; then
  :
else
  read -p "異常終了したため、処理を終了します。(Enterで終了)" END
  clear
  exit 1
fi

# /*-------------------------------------------------------------------------*/
# /*バックアップ開始xシェルの正常性確認                                     */
# /*-------------------------------------------------------------------------*/

# バックアップ処理開始
if /work/test/BackUp.sh ${TARGET2}; then
  read -p "処理を終了します。(Enterで終了)" END
  clear
  exit 0
else
  read -p "異常終了したため、処理を終了します。(Enterで終了)" END
  clear
  exit 1
fi

シェルスクリプトの実行結果

[root@localhost:/work/test]# ./GeneBk.sh

対象を MAIN [1] で実施してみる。
[ y ] を打鍵してみる。

世代管理とバックアップを行う対象を入力してください。
----------------------------------------
 MAIN  なら [1] を入力
BRABCH なら [2] を入力
 終了  なら [3] を入力
----------------------------------------
-> 1
対象は【MAIN】で正しいでしょうか? [y/n] -> y

再編処理とバックアップが実施される。(Enterで終了)

MAINの再編処理を実施します。(3世代ローテーション)
-------------------------------------------------------------
--再編前-----------------------------------------------------
合計 12
-rw-r--r--. 1 root root 187 10月 17 20:51 main_bk.tar.gz
-rw-r--r--. 1 root root 187 10月 17 20:49 main_bk.tar.gz.ver1
-rw-r--r--. 1 root root 187 10月 17 20:47 main_bk.tar.gz.ver2
-------------------------------------------------------------
-------------------------------------------------------------
/work/test/BackUp/main/main_bk.tar.gz.ver2 --> 削除 
/work/test/BackUp/main/main_bk.tar.gz.ver1 --> /work/test/BackUp/main/main_bk.tar.gz.ver2 
/work/test/BackUp/main/main_bk.tar.gz --> /work/test/BackUp/main/main_bk.tar.gz.ver1 
-------------------------------------------------------------
--再編後-----------------------------------------------------
合計 8
-rw-r--r--. 1 root root 187 10月 17 20:51 main_bk.tar.gz.ver1
-rw-r--r--. 1 root root 187 10月 17 20:49 main_bk.tar.gz.ver2
-------------------------------------------------------------
-------------------------------------------------------------
MAINの世代管理が正常終了しました。
MAINのバックアップを取得します。
-------------------------------------------------------------
-rw-r--r--. 1 root root 187 10月 17 21:22 main_bk.tar.gz
-------------------------------------------------------------
MAINのバックアップ取得がが正常終了しました。
処理を終了します。(Enterで終了)

[ n ] を打鍵してみる。

世代管理とバックアップを行う対象を入力してください。
----------------------------------------
 MAIN  なら [1] を入力
BRABCH なら [2] を入力
 終了  なら [3] を入力
----------------------------------------
-> 1
対象は【MAIN】で正しいでしょうか? [y/n] -> n
再度選択してください。(Enter)

Enterを打鍵後、再度選択が求められる。

世代管理とバックアップを行う対象を入力してください。
----------------------------------------
 MAIN  なら [1] を入力
BRABCH なら [2] を入力
 終了  なら [3] を入力
----------------------------------------
-> 

終了[ 3 ] で終了する。(Enterで終了)

世代管理とバックアップを行う対象を入力してください。
----------------------------------------
 MAIN  なら [1] を入力
BRABCH なら [2] を入力
 終了  なら [3] を入力
----------------------------------------
-> 3
処理を終了します。(Enter)

対象外の引数を入力した場合、再度選択を求められる。

世代管理とバックアップを行う対象を入力してください。
----------------------------------------
 MAIN  なら [1] を入力
BRABCH なら [2] を入力
 終了  なら [3] を入力
----------------------------------------
-> xxx 
値が違います、再度選択してください。(Enter)

今回使用したコマンドや構文について

clear コマンド
画面上をクリアするコマンド

~~参考リンク~~
【 clear 】コマンド――端末をクリアする

while文
条件が新である限り(偽になるまで)ループ処理を繰り返す。

~~参考リンク~~
while 文の使用方法

read コマンド
標準入力からの入力を変数に出力するコマンド
ユーザーに入力させるコマンドと思ってもOK!

~~参考リンク~~
【シェルスクリプト】キーボードからの入力を受け付ける方法

case文
文字列をパターンごとに場合分けして、処理を分岐させる。

~~参考リンク~~
【シェルスクリプト】(条件分岐)case文

if文(条件分岐)
条件によって処理を分岐する構文

~~参考リンク~~
if 文と test コマンド

条件式の評価 [[~]]
条件式を評価し、その結果によって終了ステータスを返す。
testコマンドとは若干違う。

~~参考リンク~~
シェルスクリプト[[]]のススメ

: コマンド
:(コロン)コマンドは、何もしないで単に[0]の終了ステータスを返すコマンド
while文(ループ)の時や、ファイルサイズ0サイズのファイルを作成する時などに使える。

~~参考リンク~~
何もしない組み込みコマンド ":" (コロン)の使い道

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?