17.3. シェルスクリプト
シェルスクリプトは、シェルに解釈・実行させるスクリプト (プログラム) です。 コマンドは基本的に一つずつ入力し実行させます。一連のコマンドを順に実行したい場合には、シェルスクリプトを書くと、 1度の指示で実行することができます。
シェルスクリプトの例 #
さっそく一つ、実践的な例を紹介してみたいと思います。それは「同じフォルダにある全ての画像を、一斉に 50% のサイズに縮小する」という例です。最近のデジタルカメラで撮った写真はサイズが大きいですから、たとえば人に渡すためにサイズを落としたいと思うことがあるのではないでしょうか?
これを GUI のアプリケーション行うには、一つ一つ写真を開いては縮小という作業を繰り返さないといけません。しかしシェルスクリプトを使えば、たった 1 行のコマンドだけで縮小作業を実現できます。それに使う道具が convert コマンドと for ループです。
convert コマンドは、画像を変換するためのコマンドです。たとえば
convert -resize 50% hoge.jpg hoge2.jpg
とすると hoge.jpg を 50% に縮小した結果が hoge2.jpg に格納されます。hoge2.jpg のところを hoge.jpg にすれば hoge.jpg が上書きされます。ちなみに convert コマンドにはもっとたくさんの機能があります。
16.4. convert コマンド
を見るなりヘルプを引いて調べるなりしてください。
for a in *.jpg; do convert -resize 50% $a small_$a ; done
と打つと、カレントディレクトリにある全ての jpg ファイルについて、 convert コマンドで 50% 縮小した small_ で始まるファイルを作成することができます。このスクリプトは、次のように読みます。
*.jpg;はカレントディレクトリにある全てのjpgファイルを表します。そしてfor a in *.jpgと書くことで、カレントディレクトリにあるjpgファイルの名前が一つずつシェル変数$aに代入され、その$aに対してdoとdoneの間にある一連のコマンドを実行します。- たとえばカレントディレクトリに
hoge.jpgがあれば、for ループが回る中でシェル変数$aにhoge.jpgが格納されます。するとconvert -resize 50% hoge.jpg small_hoge.jpgが実行され、hoge.jpgを 50% に縮小した画像がsmall_hoge.jpgに保存されます。
このようにシェルスクリプトがループを扱えるおかげで、複数の指示を1度に行うことができます。