#!/bin/bash if [ $# -ne 3 ] then echo 入力する引数は3つとしてください。 exit fi #まず、入力された引数が3つであるかどうかを確かめます。引数の個数が3つ以外だった場合はエラーメッセージを出力して終了します。 if [ $1 -ge 256 ] || [ $2 -ge 256 ] || [ $3 -ge 256 ] || [ $1 -lt 0 ] || [ $2 -lt 0 ] || [ $3 -lt 0 ] then echo 0〜255の範囲で値を入力してください。 exit fi #次に、入力された3つの引数がそれぞれ0〜255の範囲にあるかを確かめます。どれか1つでも0〜255の範囲になかった場合、エラーメッセージを出力して終了します。 #入力された引数が0〜255の範囲にあった場合、以下の処理を実行します。 if [ $1 -le 15 ] then l1=0 l2=`echo $1| sed -e 's/10/a/g' -e 's/11/b/g' -e 's/12/c/g' -e 's/13/d/g' -e 's/14/e/g' -e 's/15/f/g'` #引数1(Rに対応)が0〜15の場合、16進数に変換すると、1桁目は0、2桁目は引数1の値(10〜15の場合はアルファベットa~fに変換する)になります #そこでsedを用いて文字列の置換を行ったうえで1桁目をl1、2桁目をl2と定義します else l1=`expr $(( $1 / 16 ))| sed -e 's/10/a/g' -e 's/11/b/g' -e 's/12/c/g' -e 's/13/d/g' -e 's/14/e/g' -e 's/15/f/g'` l2=`expr $(( $1 % 16 ))| sed -e 's/10/a/g' -e 's/11/b/g' -e 's/12/c/g' -e 's/13/d/g' -e 's/14/e/g' -e 's/15/f/g'` fi #引数1が16〜255の場合、16進数に変換すると、1桁目は引数1を16で割った商(10〜15の場合はアルファベットa~fに変換する)、2桁目は引数1を16で割った余り(10〜15の場合はアルファベットa~fに変換する)になります #先ほどと同様に、sedを用いて文字列の置換を行ったうえで1桁目をl1、2桁目をl2と定義します l=$l1$l2 #Rの値lを$l1$l2で定義します if [ $2 -le 15 ] then m1=0 m2=`echo $2| sed -e 's/10/a/g' -e 's/11/b/g' -e 's/12/c/g' -e 's/13/d/g' -e 's/14/e/g' -e 's/15/f/g'` else m1=`expr $(( $2 / 16 ))| sed -e 's/10/a/g' -e 's/11/b/g' -e 's/12/c/g' -e 's/13/d/g' -e 's/14/e/g' -e 's/15/f/g'` m2=`expr $(( $2 % 16 ))| sed -e 's/10/a/g' -e 's/11/b/g' -e 's/12/c/g' -e 's/13/d/g' -e 's/14/e/g' -e 's/15/f/g'` fi #引数2(Gに対応)についても、1桁目をm1、2桁目をm2として、引数1と同様の処理を実行します m=$m1$m2 #Gの値mを$m1$m2で定義します if [ $3 -le 15 ] then n1=0 n2=`echo $3| sed -e 's/10/a/g' -e 's/11/b/g' -e 's/12/c/g' -e 's/13/d/g' -e 's/14/e/g' -e 's/15/f/g'` else n1=`expr $(( $3 / 16 ))| sed -e 's/10/a/g' -e 's/11/b/g' -e 's/12/c/g' -e 's/13/d/g' -e 's/14/e/g' -e 's/15/f/g'` n2=`expr $(( $3 % 16 ))| sed -e 's/10/a/g' -e 's/11/b/g' -e 's/12/c/g' -e 's/13/d/g' -e 's/14/e/g' -e 's/15/f/g'` fi #引数3(Bに対応)についても、1桁目をn1、2桁目をn2として、引数1と同様の処理を実行します n=$n1$n2 #Bの値nを$n1$n2で定義します o=$l$m$n #RGBのカラーコードをoとすると、oはl,m,nをつなげた値、すなわち$l$m$nと定義できます if grep -sq $o eurocolor.csv then grep $o eurocolor.csv else echo eurocolor.csv中に対応する色はありません。 fi #eurocolor.csv中に対応する色がある場合、カラーコードと色の名前を出力します #対応する色がない場合、その旨のメッセージを出力します if grep -sq $o metrocolor.csv then grep $o metrocolor.csv else echo metrocolor.csv中に対応する色はありません。 fi #metrocolor.csvについても同様の操作を行います if grep -sq $o jpcolor.csv then grep $o jpcolor.csv else echo jpcolor.csv中に対応する色はありません。 fi #jpcolor.csvについても同様の操作を行います echo 対応するカラーコードは「'#'$o」です。 #対応する色がなかった場合、カラーコードが表示されないのでそれを考慮し、最後にカラーコードを表示させます。