25.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
コマンドにはもっとたくさんの機能があります。
21.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度に行うことができます。