指定したディレクトリから特定の文字列を含むファイルを検索する(p.128)

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

boota

いろんなモノに、いろんな意味で、ヲタ。なのかも?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)