なぜこのシェルスクリプトを・・・?
対象を固定して、ユーザーに選択させる必要があったため。
これで画面ありシェルスクリプトに近づく・・・。
動きとしては、下記です。
① 対象を選択させる。
② 選んだ対象を基に、世代管理を実施する。
③ 選んだ対象を基に、バックアップを実施する。
シェルスクリプトの内容
実行環境:CentOS Linux 7 (Core)
#!/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サイズのファイルを作成する時などに使える。
~~参考リンク~~
何もしない組み込みコマンド ":" (コロン)の使い道