- 8行目
- dir=$2
- 5行目のshift命令により、第一引数が”キーワード”に、第二引数が検索対象ディレクトリになっている。
- dir=$2
- 9行目
- [ -z “$dir” ] && dir=”.”
- 第二引数が指定されていない(省略されている)場合、カレントディレクトリを指定ディレクトリとして扱うという意味。
- [ -z “$dir” ] && dir=”.”
- 10行目
- [ -z “$1” ] && exit 1
- 必須である第一引数が指定されていない場合、スクリプトから抜け出す(ステータスとして1を返す)。ステータス0は命令文が成功した場合に返す値であり、それ以外の整数が失敗した時の値となる。
- [ -z “$1” ] && exit 1
- 13行目
- if ! expr “$filename” : ‘/dev’ > /dev/null && ! expr “$filename” : ‘/proc’ > /dev/null ;then
- 「if !」で否定の条件式なので、この場合$filenameに/devが含まれているか判定し(expr)、含まれていなければ以下の処理に進む、となる。
(実際は&&により、/procが含まれているかと合わせて判定する)
/devと/procに対して14行目のgrepを実行するとエラーが返されるため、この条件分岐で/devと/procが$filenameに含まれていない時に14行目以下に進む、という意味になる。
ただし12行目でfor filename in `find $dir` ;doを実行しているため、find /devまたはfind /procは実行される。これらについての出力を/dev/nullに食わせることでエラーを回避している(のだと思う)。
- 「if !」で否定の条件式なので、この場合$filenameに/devが含まれているか判定し(expr)、含まれていなければ以下の処理に進む、となる。
- if ! expr “$filename” : ‘/dev’ > /dev/null && ! expr “$filename” : ‘/proc’ > /dev/null ;then
- 15行目
- if [ $? -eq 0 ] ;then
- 変数$?は直前の命令実行のステータスを格納する変数。14行目のstr=`grep “$1” $filename`を実行してステータスが0を返してきた、つまりgrepの実行によってキーワード($1のこと)が見つかったならば16行目以下の命令(画面に対象のファイル名を表示する命令群)に進む、という趣旨になる。
(キーワードが見つからなければ16行目以降は実行されず、12行目に従って次のfilenameでの判定に進むということ)
- 変数$?は直前の命令実行のステータスを格納する変数。14行目のstr=`grep “$1” $filename`を実行してステータスが0を返してきた、つまりgrepの実行によってキーワード($1のこと)が見つかったならば16行目以下の命令(画面に対象のファイル名を表示する命令群)に進む、という趣旨になる。
- if [ $? -eq 0 ] ;then