読者です 読者をやめる 読者になる 読者になる

labunix's blog

labunixのラボUnix

なんとなく自動販売機のお釣りスクリプトを書いてみた。

■なんとなく自動販売機のお釣りスクリプトを書いてみた。
 ホントなんとなくw。。。コンソールだともう少し缶っぽく見えるのですが。。。

$ cat otsuri.sh 
#!/bin/bash

value=("140" "160" "120" "200")
name=("cola  " "coffie" "tea   " "energy")

for x in `seq 1 9`;do
  for y in `seq 1 36`;do
    echo $(($x*$y)) | awk '{printf "%d",$1%9}';
  done;echo;
done | sed -e 's/[1-9]/=/g' -e 's/0/ /g'
for n in `seq 0 3`;do
  echo -n "$n:${name[$n]} "
done
echo -e "\n飲み物を選んでください\n[0-3]\n-1で選択を止めます。"

while read drink;do
  if [ $drink -eq -1 ];then
    echo "キャンセルします。"
    exit 1
  elif [ $drink -gt 3 -o $drink -lt 0 ];then
    echo "Error!" >&2
    exit 1
  fi
  echo "${value[$drink]} : ${name[$drink]} を選択しました"
  break
done

total=0
echo "投入金額: $total "

while read money;do
  case $money in
  10000|5000|2000|1000|500|100|50|10)
    total=$(($total + $money))
    echo "投入金額: $total "
    if [ $total -ge ${value[$drink]} ] ;then
      total=$(($total-${value[$drink]}))
      break;
    fi
  ;;
  *)
    echo "返却します。" >&2
  esac
done

echo -e "\nありがとうございます。\n"
for x in `seq 1 9`;do
  for y in `seq 1 9`;do
    echo $(($x*$y)) | awk '{printf "%d",$1%9}';
  done;echo;
done | sed -e 's/[1-9]/=/g' -e 's/0/ /g'
otsuri_total=0

while [ $total -gt 0 ];do
  for n in 10000 5000 2000 1000 500 100 50 10;do 
    otsuri=$(($total/$n))
    total=$(($total%n))
    if [ $otsuri -gt 0 ];then
      echo "おつりは $n  $otsuri 枚です。"
      otsuri_total=$(($otsuri_total+($n*$otsuri)))
    fi
  done
done
echo -e "\nおつりは全部で $otsuri_total 円です。"

$ ./otsuri.sh 
======== ======== ======== ======== 
======== ======== ======== ======== 
== == == == == == == == == == == == 
======== ======== ======== ======== 
======== ======== ======== ======== 
== == == == == == == == == == == == 
======== ======== ======== ======== 
======== ======== ======== ======== 
                                    
0:cola   1:coffie 2:tea    3:energy 
飲み物を選んでください
[0-3]
-1で選択を止めます。
0
140 : cola   を選択しました
投入金額: 0100
投入金額: 100100
投入金額: 200 円

ありがとうございます。

======== 
======== 
== == == 
======== 
======== 
== == == 
======== 
======== 
         
おつりは 501 枚です。
おつりは 101 枚です。