シェルスクリプトで処理を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"などの箇所)は、好きなコマンドなどを実行させてください。

スクリプト本体

</ br>

#!/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

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

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA