シェルスクリプトの多重起動のチェックで、色々探してみて気に入ったやり方がコレ。

if [ $$ != $(pgrep -fo $0) ]; then
  echo "`basename $0` is already running."
  exit 1
fi

UbuntuとかのLinux上で動かしたら上手くいったけど、FreeBSDで動かしたら駄目だった。
どうやら、pgrepコマンドの実装が違うらしく、自分自身のプロセスはデフォルトだと省いて値を返しているっぽい。
なので、自分自身も含めて返すようにaオプションを追加して、以下のように修正。

if [ $$ != $(pgrep -afo $0) ]; then
  echo "`basename $0` is already running."
  exit 1
fi

これでちゃんと動くようになった。

他にテンポラリファイルを作成してやるやり方もあったんだけど、Ctrl+Cとかでキャンセルした時に、ファイルが削除されなかったりで、ちょっと面倒臭かったんで、こちらの方が好きかな。
きっちりやるならテンポラリファイルを作成する形のものが良い気がするので、ケースバイケースで。