#〈方針〉 #入力した4桁の数字と、円周率データから抜き出した4桁の数字が一致するかを順に比較するという試行を繰り返す。 #まず、1回目の試行では1~4番目の4桁の数を抽出し、それが入力した4桁の値と一致するかを確かめる。 #一致するならば、試行を終了する。 #一致しないならば、次の試行へ移る。 #2~5番目の数、3~6番目の数...と1文字ずつずらして、入力した数と一致するまで試行を繰り返す。 #n回目の試行で一致したならば、「小数点以下n桁目から始まる」と表示する。 #こうすることで、入力した4桁の数が円周率データ内に複数回登場する場合でも、「数が初めて登場した桁」のみを選ぶことができる。 #また、もしも最後の4桁、すなわち999997~1000000番目まで試行を繰り返しても一致しなければ「該当なし」と表示するように設定する。 #以下、スクリプト本文 #!/bin/bash #最初に、a=1、b=4とおく。(練習段階ではここで先にa,bの値を定めておかないと正常に作動しない場合があった。) a=1 b=4 #まず、入力した数「nyuryoku」の桁数を「keta」に代入する。 nyuryoku="$1" keta=${#nyuryoku} #次に、入力した数が4桁でない場合のエラー処理を行う。 #「入力した数の桁数が4でない場合には」 if [ $keta != 4 ] #「『4桁の数字を入力してください。』と表示せよ。」 then echo 4桁の数字を入力してください。 #これで、4桁以外の数を入力したときのエラー処理を終わる。 #続いて、4桁の数が入力されたときのスクリプトを述べる。 #「入力した数が4桁でない場合以外のとき」つまり4桁の数字のとき、 else while : #kadai1_data.datにある円周率データの数字のうち、小数点以下a桁目~b桁目までを切り出し、 #切り出した値をkadai1-1_data.datという新規ファイルに挿入せよ。 do cut -c $a-$b kadai1_data.dat > kadai1-1_data.dat #注)先にa=1、b=4と置いたことで、上記のコマンドは初め「小数点以下1桁目~4桁目」として行われる。 #kadai1-1_data.datの中身、すなわち切り出した値を変数kiridashiに代入する。 kiridashi=`cat kadai1-1_data.dat` #「切り出した値kiridashiが入力した数と一致する場合には」 if [ $kiridashi = $1 ] #「『“入力した数”は円周率の小数点以下“a”桁目から始まる』と表示せよ。」 then echo $1は円周率の小数点以下$a桁目から始まる #whileのループ構造から抜け出す。 break #「もし、a桁目~b桁目が999997桁目~1000000桁目まで試行を繰り返しても、 #入力した数が円周率の中に存在せず、a桁目が999998桁目になってしまった場合には」 elif [ $a = 999998 ] #「該当なし」と表示する。 then echo 該当なし #それ以外の場合には、「aの値 + 1」の値をaに代入し直す。 #bにも同様の操作を行う。 else a=`expr $a + 1` b=`expr $b + 1` fi done fi #これにて課題1のスクリプトを終える。