為替レート(FXレート)を取得・表示するシェルスクリプト(バッチ処理プログラム) ~ベース通貨、クォート通貨を自由に変更・指定してドル円、ユーロ円、ポンド円、豪ドル円、ユーロドルなどの現在値をインターネットから参照する方法~
AWS(Amazon Web Services)やGCP(Google Cloud Platform)などドル建てで請求が行われるパブリッククラウドサービスなどグローバル化が進み、様々な海外サービスが入ってきている近年ではFXなどの投資をしている人以外も為替レートが生活の消費に影響を直接与えるようになってきました。
現在、インターネット上では為替レートを参照できる様々なサービスがあり、中には秒単位でのリアルタイムの値を閲覧できるものもあります。
ただ、バッチ処理などで現在の外国通貨で現在の概算を計算する場合などシェルスクリプトで為替レートを扱いたい処理も存在します。
今回はインターネット上に公開されている為替レートに対してベース通貨、クォート通貨を自由に変更・指定して知りたい通貨の現在値を取得するシェルスクリプト(バッチ処理プログラム)を備忘録として記載します。
為替レート(FXレート)を取得・表示するシェルスクリプト(バッチ処理プログラム) ~ベース通貨、クォート通貨を自由に変更・指定してドル円、ユーロ円、ポンド円、豪ドル円、ユーロドルなどの現在値をインターネットから参照する方法~
基本方針としては「xurrency.com」で公開されている各国の為替レート情報から指定したベース通貨、クォート通貨で検索して対象の通貨の値を取得表示します。
また、ベース通貨、クォート通貨が同じ場合はその通貨をベース通貨とした主要通貨+αの一覧表を表示するようにしています。
為替レート(FXレート)を取得・表示するシェルスクリプト(バッチ処理プログラム)
シェルスクリプト(バッチ処理プログラム)の内容はベース通貨、クォート通貨の引数で公開されている為替レート情報から対象の通貨の値を取得しています。
引数がない場合は日本円をベース通貨とした主要通貨+αの一覧表を、2つの引数が同じ場合はその通貨をベース通貨とした主要通貨+αの一覧表を表示します。
下記の例で使用されている主要通貨+αは下記となります。
主要通貨:USD(米ドル) EUR(ユーロ) JPY(日本円) GBP(英ポンド) CHF(スイスフラン)
+α:AUD(豪ドル) CAD(カナダドル) CNY(人民元) SEK(スウェーデン・クローナ) MXNメキシコ・ペ() NZD(NZドル) ZAR(南アフリカランド) TWD(台湾 ドル) KRW(韓国ウォン) NOK(ノルウェイクローネ) THB(タイバーツ)
[root@localhost ~]# vim check_currency_rate.sh
#!/bin/bash #ページ情報を保存する一時ディレクトリの指定 TMP_DIR=/tmp #引数からベース通貨を設定 BASE=$1 #引数からクォート通貨を設定 QUOTE=$2 #ベース通貨がない場合はjpyを指定 if [ "${BASE}" = "" ]; then BASE=jpy fi #クォート通貨がない場合はjpyを指定 if [ "${QUOTE}" = "" ]; then QUOTE=jpy fi #公開されている為替情報を取得 CURRENCIES=`curl -sS https://xurrency.com/currencies | grep 'href' | grep 'title' | grep '://xurrency.com/' | sed 's/ //g' | sed 's/:\/\/xurrency.com\// /g' | sed 's/"http//g' | sed 's/"https//g' | sed 's/"/ /g' | awk '{print "[" $2 "]"}' | sort | uniq | tr -d '\n'` #ベース通貨の文字列を小文字に変換 BASE=`echo "${BASE}" | tr 'A-Z' 'a-z'` #クォート通貨の文字列を小文字に変換 QUOTE=`echo "${QUOTE}" | tr 'A-Z' 'a-z'` #指定したベース通貨が公開為替情報に存在するかを確認 IS_BASE=`echo "$CURRENCIES" | grep "\[${BASE}\]" | wc -l | sed 's/ //g' | sed 's/\t//g' | tr -d '\n'` if [ "${IS_BASE}" = "0" ]; then echo "The Base Currency is Invalid." echo "$CURRENCIES" exit 1 fi #指定したクォート通貨が公開為替情報に存在するかを確認 IS_QUOTE=`echo "$CURRENCIES" | grep "\[${QUOTE}\]" | wc -l | sed 's/ //g' | sed 's/\t//g' | tr -d '\n'` if [ "${IS_QUOTE}" = "0" ]; then echo "The Base Currency is Invalid." echo "$CURRENCIES" exit 1 fi #クォート通貨の文字列を小文字に変換 QUOTE=`echo "${QUOTE}" | tr 'A-Z' 'a-z'` #クォート通貨に対する値が存在する公開為替情報を取得 curl -sS https://xurrency.com/${QUOTE} > ${TMP_DIR}/get_currency_rate.txt #ベース通貨の文字列を大文字に変換 BASE=`echo "${BASE}" | tr 'a-z' 'A-Z'` echo "The Base Currency: ${BASE}" #クォート通貨の文字列を大文字に変換 QUOTE=`echo "${QUOTE}" | tr 'a-z' 'A-Z'` echo "The Quote Currency: ${QUOTE}" #文字列置換に使用する改行コードを指定する。 LF=$'\\\x0A' if [ "${BASE}" != "${QUOTE}" ]; then #ベース通貨とクォート通貨が違う場合は<クォート通貨>/<ベース通貨>の値をページ情報から取得して表示する。 BASE=`echo "${BASE}" | tr 'a-z' 'A-Z'` RATE=`cat ${TMP_DIR}/get_currency_rate.txt | grep "${BASE}" | grep '^1' | grep 'abbr' | tail -n 1 | sed 's/[^0-9.]/'"$LF"'/g' | grep '^[0-9]' | sed 's/^\.//g' | sed 's/\.$//g' | sort -n | uniq | grep '^[0-9]*\.[0-9]*$'` echo "${BASE}/${QUOTE}: ${RATE}" else #ベース通貨とクォート通貨が同じ場合は<MAJORSの配列に存在する通貨>/<ベース通貨>の値をページ情報からそれぞれ取得して表示する。 MAJORS=(USD EUR JPY GBP AUD CAD CHF CNY SEK MXN NZD ZAR TWD KRW NOK THB) for MAJOR in ${MAJORS[@]}; do BASE=`echo "${MAJOR}" | tr 'a-z' 'A-Z'` if [ "${BASE}" != "${QUOTE}" ]; then RATE=`cat ${TMP_DIR}/get_currency_rate.txt | grep "${BASE}" | grep '^1' | grep 'abbr' | tail -n 1 | sed 's/[^0-9.]/'"$LF"'/g' | grep '^[0-9]' | sed 's/^\.//g' | sed 's/\.$//g' | sort -n | uniq | grep '^[0-9]*\.[0-9]*$'` echo "${BASE}/${QUOTE}: ${RATE}" else echo "${BASE}/${QUOTE}: 1" fi done fi #一時ディレクトリに存在する一時ページ情報を削除する。 rm -f ${TMP_DIR}/get_currency_rate.txt
為替レート(FXレート)を取得・表示するシェルスクリプト(バッチ処理プログラム)の使用例
引数に指定する通貨変えて下記を取得する例を記載しています。
引数[usd jpy]:USD/JPYの取得
引数[eur usd]:EUR/USDの取得
引数[無し]:<主要通貨+α>/JPYの取得
引数[usd usd]:<主要通貨+α>/USDの取得
[root@localhost ~]# chmod 755 check_currency_rate.sh [root@localhost ~]# ./check_currency_rate.sh usd jpy The Base Currency: USD The Quote Currency: JPY USD/JPY: 112.3596 [root@localhost ~]# ./check_currency_rate.sh eur usd The Base Currency: EUR The Quote Currency: USD EUR/USD: 1.0613 [root@localhost ~]# ./check_currency_rate.sh The Base Currency: JPY The Quote Currency: JPY USD/JPY: 112.3596 EUR/JPY: 120.4819 JPY/JPY: 1 GBP/JPY: 140.8451 AUD/JPY: 86.9565 CAD/JPY: 86.2069 CHF/JPY: 112.3596 CNY/JPY: 16.4474 SEK/JPY: 12.6904 MXN/JPY: 5.5218 NZD/JPY: 81.3008 ZAR/JPY: 8.6356 TWD/JPY: 3.6590 KRW/JPY: 0.0983 NOK/JPY: 13.5318 THB/JPY: 3.2279 [root@localhost ~]# get_currency_rate.sh usd usd The Base Currency: USD The Quote Currency: USD USD/USD: 1 EUR/USD: 1.0613 JPY/USD: 0.0089 GBP/USD: 1.2405 AUD/USD: 0.7688 CAD/USD: 0.7661 CHF/USD: 0.9975 CNY/USD: 0.1458 SEK/USD: 0.1124 MXN/USD: 0.0489 NZD/USD: 0.7182 ZAR/USD: 0.0765 TWD/USD: 0.0324 KRW/USD: 0.0009 NOK/USD: 0.1199 THB/USD: 0.0286Reference: Tech Blog citing related sources