- 10行目
- [ -d $dir ] || exit 1
- [ -d $dir ]で、変数$dirがディレクトリかどうかを判定する。
変数$dirがディレクトリであれば「真」、そうでなければ「偽」となる。 - || はOR命令。命令1(つまり[ -d $dir ]のこと)が正常終了しなかった時(つまりディレクトリでない時)、次の命令(つまりexit 1)を実行する、という流れになる。
- exitの後の数字は、終了ステータス。シェルスクリプトでは正常に終了した場合はステータスとして「0」を、そうでない場合は「1」をパラメータとして指定するらしい。
- [ -d $dir ]で、変数$dirがディレクトリかどうかを判定する。
- 変数$dirがディレクトリでない場合は終了ステータスに1をセットして終了せよ、という記述となる。
- [ -d $dir ] || exit 1
- 11行目
- dir=
'echo "$dir" | sed 's/¥/$//'`
- “$dir”のダブルクオーテーションは、クオーテーション内の変数を置き換える($を変数指定の文字として扱う)時に用いる。
- 反対に、sed ‘ s/¥/$//’のシングルクオーテーションは文字列を置き換えない(特殊文字を特殊文字のまま解釈する)。従って正規表現の$を変数指定の文字ではなく、正規表現における行末を表す$として解釈する。
- sedコマンドで行末にある「/」を「」で置き換える、つまり行末の「/」を取り除く、という意味になる。
例)変数$dirが/foo/bar/であったならば、/foo/barという値がdirにセットされる。
- dir=
- 12行目
- if expr “$filename” : ‘.*[A-Z] >/dev/null; then
- 変数$filenameの中に、AからZのグループに含まれる文字があるかどうか(つまり大文字が含まれるかどうか)をexprコマンドでチェックしている。
もし大文字が含まれているならばexprコマンドの結果として大文字の文字数が返され、含まれていなければ「0」が返される(if文では「0」は偽であり、それ以外の数字が「真」となる)。
- 変数$filenameの中に、AからZのグループに含まれる文字があるかどうか(つまり大文字が含まれるかどうか)をexprコマンドでチェックしている。
- 0以外の数字であれば、then以下の命令を実行せよ、ということになる。
- if expr “$filename” : ‘.*[A-Z] >/dev/null; then
- 17行目
- if [ “$answer” = “y” -o “$answer” = “Y” ]; then
- testコマンド中央にある「-o」オプションはtestコマンドにおける論理和(OR条件)指定。
- 19行目と22行目で同じ命令文
mv -i $dir/$filename $dir/$rename
が与えられているが、これは19行目の命令は変数$argに初期値-iが指定されていて対話的に命令を実行するのに対し、22行目はelseの場合、つまり変数$argにrename.shのオプションである-fが(明示的に)指定されている場合の命令実行を意味している。
- ファイル名の大文字を小文字にリネームするという動作をインタラクティブに行うか確認なしで行うかをifの条件式で分けているだけなので、mv -iでリネームするという動作自体は変わらない。
- if [ “$answer” = “y” -o “$answer” = “Y” ]; then