俺は世界を愛してる!

日記、食べたもの、飲んだもの、備忘録、思ったこと、などなど

来年のクリスマスに女性と過ごせる確率を計算するスクリプト

★追記有り

みなさんこんばんは。

今日はクリスマスイブですね。
※これを実際に書いているのは12/18ですがアドベントカレンダーへの公開が12/24なのでそういう体で進めてます。


クリスマスってなんでイベントになってるんだけ?
って方もいるかもしれないので、クリスマスの事を詳しく説明している書物から引用して書いておきますね。

クリスマスの由来といえば古代中国は北方の山中に住む、
常に重要な宣託を与えてくれるという老師、通称「宣託老師(せんたくろうし)」に
武術の達人「具李 周益(クリ・シュウマス)」が1年に及ぶ旅路の末
出会うことが出来たことから12/25がクリスマスと呼ばれるようになった、
ということは周知の事実であるが、24日、つまりクリスマス前日が
「具李が老師に会う直前、荒ぶる虎に襲われたところを近くの村の者が
虎を慰撫して難を逃れた」というエピソードから「クリスマス・イブ」と
呼ばれるようになったことはあまり知られていない。


また、クリスマスにプレゼントが貰えるという風習は具李が老師から無事に
重要な宣託(プレゼント)を頂けたことに由来しているのである。



民明書房刊『伝説の達人・具李周益を紐解く』内
          『クリスマスの起源と歴史』より抜粋


そんなクリスマスですが、やっぱり過ごし方の定番と言ったら
『家族と過ごす』
『恋人と過ごす』
ですよね。


なので今回は単独の独身男性を対象に
『来年のクリスマスに女性と過ごせる確率を計算するスクリプト
を作ってみたのでそれを公開したいと思います。


分からん方にはとことん分からんと思いますが、LinuxですよLinux

CentOS 7でございますので、それ以外での動作は保証してません(というか元より動作保証はしてません)




lovers.sh
#!/bin/sh

# 導入
echo "これから貴方が来年のクリスマスに女性と過ごせる確率を計算します。"
sleep 1
echo "質問には正直に答えてください。"
sleep 1
echo ""
echo "※今現在恋人(又は配偶者)がいない方が対象です。"

echo ""
echo ""
sleep 1

# ここから質問
echo "質問1:"
echo "貴方の年齢を教えて下さい。(半角数字)"

# 入力値を変数に格納
read a1

# 入力値が半角数字かチェック
while [[ ! ${a1} =~ ^[0-9]+$ ]]
do
    # 半角数字のみで入力されるまで繰り返し
    echo "半角数字で入力してください。"
    read a1
done

echo ""

echo "質問2:"
echo "最後に恋人がいたのはいつですか?(該当の番号を入力して下さい)"

echo "1:30日以内  2:半年以内  3:1年以内  4:10年以内  5:いたことない"

# 入力値を変数に格納
read a2

# 入力値が1〜5かチェック
while [[ ! ${a2} =~ ^[12345]$ ]]
do
    # 1〜5のみで入力されるまで繰り返し
    echo "半角数字1〜5のどれかを入力してください。"
    read a2
done

# 入力によって格納する変数を変える
case ${a2} in
    "1" ) a2=0;;
    "2" ) a2=5;;
    "3" ) a2=10;;
    "4" ) a2=50;;
    "5" ) a2=100;;
esac

echo ""

echo "質問3:"
echo "今現在、アプローチをしている女性はいますか?(該当の番号を入力して下さい)"

echo "1:いる  2:いない  3:女性に興味がない"

# 入力値を変数に格納
read a3

# 入力値が1〜3かチェック
while [[ ! ${a3} =~ ^[123]$ ]]
do
    # 1〜3のみで入力されるまで繰り返し
    echo "半角数字1〜3のどれかを入力してください。"
    read a3
done

# 入力によって格納する変数を変える
case ${a3} in
    "1" ) a3=0;;
    "2" ) a3=10;;
    "3" ) a3=100;;
esac

echo ""

echo "質問4:"
echo "身嗜みを整える努力をしている(該当の番号を入力して下さい)"

echo "1:頑張ってる  2:人並みには  3:あんまりしてない  4:風呂は一ヶ月に一度"

# 入力値を変数に格納
read a4

# 入力値が1〜4かチェック
while [[ ! ${a4} =~ ^[1234]$ ]]
do
    # 1〜4のみで入力されるまで繰り返し
    echo "半角数字1〜4のどれかを入力してください。"
    read a4
done

# 入力によって格納する変数を変える
case ${a4} in
    "1" ) a4=0;;
    "2" ) a4=10;;
    "3" ) a4=50;;
    "4" ) a4=100;;
esac

echo ""

echo "質問5:"
echo "付き合いたい女性は(該当の番号を入力して下さい)"

echo "1:料理が上手  2:かわいい  3:綺麗好き  4:新垣結衣"

# 入力値を変数に格納
read a5

# 入力値が1〜4かチェック
while [[ ! ${a5} =~ ^[1234]$ ]]
do
    # 1〜4のみで入力されるまで繰り返し
    echo "半角数字1〜4のどれかを入力してください。"
    read a5
done

# 入力によって格納する変数を変える
case ${a5} in
    "1" ) a5=0;;
    "2" ) a5=10;;
    "3" ) a5=0;;
    "4" ) a5=100;;
esac

echo ""

# 結果算出の演出
echo "結果を算出しています。。。";usleep 300000

for i in `seq 5 -1 1`
do
    echo -n ${i};usleep 500000
    echo -n ".";usleep 500000
    echo -n ".";usleep 500000
    echo -n ".";usleep 500000
    echo ""
done

echo ""

# 入力された内容に基づいて結果を表示する
r1=`expr ${a2} + ${a3} + ${a4} + ${a5}`

echo -n "あなたが来年女性とクリスマスを過ごせる確率は "

if [ ${r1} = "400" ]; then
    echo "0.1% 未満です。"
    echo "いろいろ頑張りましょう。"
    exit 0
elif [ ${a3} = "100" ] || [ ${a4} = "100" ] || [ ${a5} = "100" ]; then
    echo "5% くらいです。"
    echo "なにかしら致命的な部分があるので自覚しましょう。"
    exit 0
fi

if test ${a2} -eq "100" -a ${a1} -ge "50"; then
    echo "10% 以下くらいです。"
    echo "特別な努力が必要でしょう。"
    exit 0
fi

if [ ${r1} -ge "120" ]; then
    echo "20% 以下くらいです。"
    echo "希望はあります。磨きをかけていきましょう。"
elif [ ${r1} -ge "110" ]; then
    echo "30% 以下くらいです。"
    echo "なんとかいけるかもしれません。"
elif [ ${r1} -ge "100" ]; then
    echo "40% 以下くらいです。"
    echo "油断しないでいきましょう。"
elif [ ${r1} -ge "80" ]; then
    echo "50% 以下くらいです。"
    echo "周りのアドバイスに耳を傾けましょう。"
elif [ ${r1} -ge "70" ]; then
    echo "60% 以下くらいです。"
    echo "自分の強みを見直してみましょう。"
elif [ ${r1} -ge "60" ]; then
    echo "65% 以下くらいです。"
    echo "自信を持って振るまってみましょう。"
elif [ ${r1} -ge "50" ]; then
    echo "70% 以下くらいです。"
    echo "価値観の合いそうな人を探しましょう。"
elif [ ${r1} -ge "40" ]; then
    echo "75% 以下くらいです。"
    echo "思い切ってお茶にでも誘ってみましょう。"
elif [ ${r1} -ge "30" ]; then
    echo "80% 以下くらいです。"
    echo "共通の話題が持てるようにアンテナをはりましょう。"
elif [ ${r1} -ge "20" ]; then
    echo "85% 以下くらいです。"
    echo "余計なプライドは捨てていきましょう。"
elif [ ${r1} -ge "10" ]; then
    echo "90% 以下くらいです。"
    echo "早めに行動を始めましょう。"
elif [ ${r1} -eq "5" ]; then
    echo "95% 以下くらいです。"
    echo "自分を信じていきましょう。"
elif [ ${r1} -eq "0" ]; then
    echo "99% くらいです。"
    echo "残りの1‰は運です。逃さず掴みましょう!"
fi

exit 0
解説という名のなにか

先に言っておきます。
計算と結果はなんの根拠もなく非常にテキトーです。

なのでそこに関しての解説は皆無です。


では本編。

聡明な諸兄なら見てすぐに分かると思いますが、わざと非効率的だったり統一感の無い書き方をしてたりしてます。

なぜならこれを書いた理由というのが「シェルスクリプトを書いたことのない人の為の資料になればいい」というものだからです。

よく見て頂くと、シェルスクリプト組もうとした時になんとなく使いそうな

  • 変数への代入
  • 変数の使い方
  • if
  • while
  • case
  • for
  • expr
  • read

とか使ってます。
※運用業務とかだともっと使いそうな文字列操作の類は、長くなるので今回はパスしてます。

もしこれからlinuxシェルスクリプト組みたいな~とか思ってる方がいて、
少しでもこれが参考になれば幸いです。


以上。


追記:
アドベントカレンダー12/6のNさんの記事でCentOSをインストールしてるのがあったので、それを見てLinux入れて試してみてね!