シェルスクリプト

16.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 コマンドにはもっとたくさんの機能があります。 15.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 に対して dodone の間にある一連のコマンドを実行します。
  • たとえばカレントディレクトリに hoge.jpg があれば、for ループが回る中でシェル変数 $ahoge.jpg が格納されます。すると convert -resize 50% hoge.jpg small_hoge.jpg が実行され、hoge.jpg を 50% に縮小した画像が small_hoge.jpg に保存されます。

このようにシェルスクリプトがループを扱えるおかげで、複数の指示を1度に行うことができます。

環境変数 シェルスクリプト エイリアス