#!/bin/bash a=1 b=4 #後のために数字1、4をそれぞれ変数a、bに代入しておく。 keta="$1" #実行時引数をketaという変数に代入する。 ketasu=`echo ${#keta}` #変数ketaに入っている文字、つまり実行時引数の文字数を知るために「echo ${#変数名}」コマンドによって求める。 #求めた文字数をketasuという変数に代入する。 case $# in [01]) while [ $ketasu != 4 ] #引数が4桁ではない、または引数が入力されていない場合。 do echo "Error!!" echo "引数が入力されていない、指定された引数は4桁ではない、可能性があります" echo "4桁の数字を入力してください。" #4桁出ない場合のエラー処理。 read number keta=$number ketasu=`echo ${#keta}` #引数が入力されなかった場合でも後から数値を打ち込んでもらいそれの桁数を示す。 if [ $ketasu = 4 ] ; then break #4桁の数字が入力されたなら何桁目から始まるかの計算に移る。 fi done #今、入力した数字がまた4桁でなかったので聞き直す。 while [ $ketasu = 4 ] #引数が正しく4桁入力された場合。 do cut -c $a-$b kadai1_data.dat > kadai1-1_data.dat #kadai1_data.datの中身、つまり円周率の小数点以下百万桁の数字を「cut」によりa桁目からb桁目(初めは1桁目から4桁目)まで切り出し、kadai1-1_data.datというファイルに挿入する。 pass=`cat kadai1-1_data.dat` #kadai1-1_data.datの中身、つまり切り出した値を変数passに代入する。 if [ $keta = $pass ] #入力された数字が存在する場合。 then echo $ketaは円周率の小数点以下$a桁目から始まります。 #入力された数字が何桁目から表示されるかを答える。 break #コマンド「break」によってwhileのループ構造から抜け出す。 elif [ $a = 999997 ] #この意味は「もし、a桁目~b桁目が999996桁目~1000000桁目になるまでループを繰り返しても円周率の中に実行時引数が存在せず、a桁目が999997桁目まで突入してしまった場合は」ということ。 then echo "入力された数字はこのデータの中には存在しません。" #小数点以下100万桁以内に入力された数字がなかった時のエラー処理。 else a=`expr $a + 1` b=`expr $b + 1` # それ以外の場合は、変数aに対して、コマンド「expr」により整数計算「変数a + 1」を行いその値を変数aに代入し直す。 # 変数bに対しても同様の操作を行う。 fi done;; *)echo '入力する引数は一つにしてください。' ;; esac