いちいちlockファイル置いたりしてexitしたらゴミが残ったり、シビアなタイミングだとファイル作る前に2つ目が起動しちゃったりするのはナンセンス。
お手軽かつ比較的正確にやるなら、pgrepで既に同じシェルが起動していないか調べれば良い。
if [ $$ -ne $(pgrep -fo "$0") ]; then
echo "既に起動されています"
exit 1
fi
引数も含めて多重をチェックするなら、検索する文字列を少し工夫する。
_CMD="$0 $@"
if [ $$ -ne $(pgrep -fo "$_CMD") ]; then
echo "既に起動されています"
exit 1
fi