#!/bin/sh a=1 b=4 #後のために数字1、4をそれぞれ変数a、bに代入しておく #まず、4 桁の数字以外のものを指定した場合にエラー処理を行なわれるようにする。 keta="$1" #実行時引数をketaという変数に代入する ketasu=`echo ${#keta}` #変数ketaに入っている文字、つまり実行時引数の文字数を知るために「echo ${#変数名}」コマンドによって求める。 #求めた文字数をketasuという変数に代入する moji=4 #変数mojiに数値4を代入しておく if [ $moji != $ketasu ] # ↑ この意味は「変数ketasuの値、つまり実行時引数の文字数が4(=変数moji)でない場合は」ということ。 then echo 桁数が間違ってます。4桁の数字を入力してください。 # [ ]内が成立する場合はコマンド「echo」によって「 桁数が間違ってます。4桁の数字を入力してください。」という文を表示する。 #この手順で、4 桁の数字以外のものを指定した場合にエラー処理を行なうことができる。 #では次に、4桁の数字が指定された場合の処理を行う。 else while : # ↑ ここでのelseの意味は「変数ketasuの値、つまり実行時引数の文字数が4(=変数moji)である場合は」ということ。 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 [ $pass = $1 ] # ↑ この意味は「変数pass、つまり切り出した値が実行時引数と一致する場合は」ということ。 then echo $1は円周率の小数点以下$a桁目から始まります # [ ]内が成立する場合はコマンド「echo」によって「 `実行時引数`は円周率の小数点以下`a`桁目から始まります」という文を表示する。 break # コマンド「break」によってwhileのループ構造から抜け出す elif [ $a = 999997 ] # ↑ この意味は「もし、a桁目~b桁目が999996桁目~1000000桁目になるまでループを繰り返しても円周率の中に実行時引数が存在せず、a桁目が999997桁目まで突入してしまった場合は」ということ。 then echo 探している4桁の数字は円周率百万桁の中には存在しません # [ a = 999997 ]が成立する場合はコマンド「echo」によって「探している4桁の数字は円周率百万桁の中には存在しません」いう文を表示する。 else a=`expr $a + 1` b=`expr $b + 1` # それ以外の場合は、変数aに対して、コマンド「expr」により整数計算「変数a + 1」を行いその値を変数aに代入し直す。 # 変数bに対しても同様の操作を行う。 fi done fi