強火で進め

このブログではプログラム関連の記事を中心に書いてます。

シェルスクリプトを簡単にMacの実行ファイルにする方法

手順

1. 「アプリケーション」フォルダから Automator.app を見つけそれを起動。
2. 起動後に以下の様なパネルが表示されるので「アプリケーション」を選択。

3. 左上の検索欄に「スクリプト」と入力し、絞り込みを行う。

4. 右側の領域にshiftキーを押しながらドラッグ&ドロップ。

5. ここでは例として「入力として受け取ったファイル名を元にそのファイル名の末尾に_00〜_10を付けた空ファイルを作る」シェルスクリプトを実行ファイルに変換します。

「入力の引渡し方法」を「引数として」に変更します。

スクリプトの記述部分には以下の内容をコピペします。

for f in "$@"
do
    num=0
    while [ $num -le 10 ]
    do
        num_str=0$num
        append=_${num_str:${#num_str}-2:2}
        ext=${f#*.}
        if [ "$f" = "$ext" ]
        then
            ext=""
        else
            ext=.$ext
        fi
    	touch "${f%%.*}$append$ext"
        num=`expr $num + 1`
    done
done

最後にcommad+sで保存するとプログラムが作成されます。

作成されたプログラムにファイルをドラッグすると「入力として受け取ったファイル名を元にそのファイル名の末尾に_00〜_10を付けた空ファイルを作る」という動作が行われているが確認出来ると思います。

なお、このスクリプトではフォルダをドラッグしてもそのフォルダ名を元に空ファイルを作成します。この辺りは是非みなさんの手でフォルダがドラッグされた場合は同様にフォルダを作成する様にバージョンアップしてみて下さい。

作成時のTips

  • 実行ファイル化した物の中でエラーが発生しても調査が難しいです。事前に.shファイルなどを作り、そちらで事前にしっかりと動作テストをしましょう。
  • どうしても実行ファイルでないと再現されないバグが発生した場合は以下の様に記述してファイルに変数の値を出力する様にしましょう。
echo $check_data >> /tmp/test.txt

※ /tmp/test.txt のパスは必要に応じて分り易いパスを使って下さい。

  • 引数として渡されるファイル名は途中にスペースが入ったファイル名の場合も有りえます。必要に応じて "$file" の様に " で囲みましょう。

【参考】

Linuxシェルスクリプトユーザー便利帳 (QUICK MASTER 16)

Linuxシェルスクリプトユーザー便利帳 (QUICK MASTER 16)