24時間365日フルマネージドホスティングサービスのデイーネット

シェルスクリプトで処理を4パターン分岐させるサンプル

jog.JPG

Tヨシダです。
最近、ランニングシューズを買い換えたのですが、健康のことを考えてベアフットシューズ(激しく靴底が薄い靴)を買った所、軽く走っただけなのに、ふくらはぎの筋肉痛がバキバキにきました。

これは凄い効果!

また、足の裏が石つぶてでかなりやられたらしく、鈍い痛みが・・・。
10年以上ジョギングしているのに、また1からジョギングしなおしって感じです。


さて、お客様から、後述のちょっとした要件があり、社内のエンジニアの手を借りるまでも無いレベルの作業だったので、久々にシェルスクリプトを書いた所、ビギナー用のサンプルに丁度良さそうなスクリプトができたので、晒したいと思います。


実際には、引数を一つ付けて実行するタイプのスクリプトだったのですが、このブログ用にまとめて記載しています。


また、スクリプトの中で実行されること自体は簡単なことなので、適当なコマンドに置き換えています。
読み替えていただければと思います。

やりたいこと

  • 日付用のファイル『Calendar.txt』内に、休日を入れると仮定します。書式は後述。
  • Calendar.txtの書式は、1行にYYYYMMDD形式で羅列
20180101
20180102
20180103
20180104
20180106
20180107
20180108
20180113
20180114
20180120
20180121
20180127
(以下、省略)

処理の分岐として以下の通り。

  • 処理A:今日の日付がリストに有る場合で、スイッチがOFFなら、スイッチをONにする。
  • 処理B:今日の日付がリストに有る場合で、スイッチが既にONなら何もしない。
  • 処理C:今日の日付がリストに無い場合で、スイッチがONなら、スイッチをOFFにする。
  • 処理D:今日の日付がリストに無い場合で、スイッチが既にOFFなら何もしない。

上記を参考に、流用してもらえればと思います。

仕様

  • ディレクトリパスはサンプルなので、/tmp/ 以下で記載しているので、適当に書き換えを。
  • フラグファイルとして、『.flag』を使っています。
  • 処理Aが2回ならないように、処理の最後に『.flag』をtouchしている。
  • 処理Cについてはこの逆で、処理の最後に『.flag』をrmしている。
  • 処理A~Dの箇所(echo "処理 : A"などの箇所)は、好きなコマンドなどを実行させてください。

スクリプト本体

#!/bin/bash

# スクリプトと実行ディレクトリはよしなに決めてください。
EXECDIR=/tmp
CALENDAR=/tmp/Calendar.txt

# YYYYMMDD 形式で今日の日付を変数に入れる
TODAY=`date +%Y%m%d`

# 実際の本体は以下となります。
if [ `/bin/cat $CALENDAR | grep $TODAY` ]
# ここから今日の日付がリストにある場合の処理(A or B)
then
  if [ ! -e ${EXECDIR}/.flag ]
  then
    echo "処理 : A"
    touch ${EXECDIR}/.flag
  else
    echo "処理 : B"
  fi

# ここから今日の日付がリストに無い場合の処理(C or D)
else
  if [ -e ${EXECDIR}/.flag ]
  then
    echo "処理 : C"
    rm -f ${EXECDIR}/.flag
  else
    echo "処理 : D"
  fi
fi


ライトなネタですが、何かの参考になれば嬉しいです!

  • このページの先頭へ

  • 東京本社
    〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
    TEL:03-3591-8887 FAX:03-3591-8886
  • 大阪本社
    〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
    TEL:06-6231-8887 FAX:06-6231-8897

  • 認証範囲はこちらをご覧ください。

Denet logo

クラウドサービス・データセンタ・高機能専有サーバ・共有サーバホスティングサービス 株式会社ディーネット
dot_bar