シェルスクリプトの書き方

どこからつっこめばいいのやら。

コマンド置換とパス展開

ディレクトリ以下のファイルがほしいなら `ls ${2}` ではなく素直に "$2"/* でいいのでは。

クォート

どのような入力がくるかわからないときはちゃんと引用符で囲みましょう。

if [ -f $FULL ]; then $1 $FULL; fi

ではなく、きちんと

if [ -f "$FULL" ]; then "$1" "$FULL"; fi

とする。

リダイレクト

#! /bin/bash

cat $1 | tr -d '\r'  > $1

これがうまく動いているのはたまたま。理由は以前書いたので、そちらを参照。

というかね、こういうことはいちいちシェルスクリプトをつくるんではなくて、find と xargs を使うものじゃないかな。

find win_texts -type f -print0 | xargs -0 perl -i -pe 'tr/\r//d'

find だけならこう。

find win_texts -type f -exec perl -i -pe 'tr/\r//d' {} \;

あと、id:kanbayashi さんがつくろうとしているのも、自分ならこう書くかなぁ。

#!/bin/bash

# file is default target
type=f

while getopts 'fd' option;
do
    case "$option" in 
        f) type='f' ;;
        d) type='d' ;;
    esac
done

[ $OPTIND > 1 ] && shift $((OPTIND - 1))

command="$1"
dir="$2"

find "$dir" -type "$type" -exec "$command" {} \;

というかたぶん、これくらいのものなら書かないけど。
あぁ、あと [ はコマンドなんだからその後ろに空白を入れましょう。] の前も。