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

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

以前動かしたら上手くいったと思ったんだけど、今動かしたら駄目だった。
親プロセスから子プロセスを起動する感じだとうまくいかないっぽい。
CRONでの起動とかは駄目らしいんだけど、よく分かっていない。
とりあえず親プロセスも見るように修正した。

if [ $$ != $(pgrep -fo $0) -a ${PPID} != $(pgrep -fo $0) ]; then
  echo "${0} is already running."
  exit 1
fi

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

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