25.4 シェルスクリプト

シェルスクリプトというのは,シェルに解釈・実行させるスクリプト (プログラム) です.この節ではシェルスクリプトの簡単な紹介をします.
これまでコマンドは基本的に一つずつ入力し実行させていましたが,シェルスクリプトを書くと複数の作業を一斉にこなすことができます.シェルを使う最大の理由はシェルスクリプトにあると言っても過言ではなく,シェルスクリプトを生かせれば作業効率が段違いに上がります.ぜひシェルスクリプトの書き方を身につけてください.

シェルスクリプトの例

さっそく一つ,実践的な例を紹介してみたいと思います.それは「同じフォルダにある全ての画像を,一斉に 50% のサイズに縮小する」という例です.最近のデジタルカメラで撮った写真はサイズが大きいですから,たとえば人に渡すためにサイズを落としたいと思うことがあるのではないでしょうか?
これを GUI のアプリケーション行うには,一つ一つ写真を開いては縮小という作業を繰り返さないといけません.しかしシェルスクリプトを使えば,たった 1 行のコマンドだけで縮小作業を実現できます.それに使う道具が convert コマンドと for ループです.
convert コマンドは,画像を変換するためのコマンドです.たとえば

convert -resize 50% hoge.jpg hoge2.jpgreturn2

とすると hoge.jpg を 50% に縮小した結果が hoge2.jpg に格納されます.hoge2.jpg のところを hoge.jpg にすれば hoge.jpg が上書きされます.ちなみに convert コマンドにはもっとたくさんの機能があります.hwb21.5 convert コマンド を見るなりヘルプを引いて調べるなりしてください.
そして
for a in *.jpg; do convert -resize 50% $a small_$a ; donereturn2

と打つと,カレントディレクトリにある全ての jpg ファイルに convert コマンドで 50% 縮小をかけることができます.このスクリプトは,次のように読みます.

  • *.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 に保存されます.

このようにシェルスクリプトがループを扱えるおかげで,GUI では手間のかかる操作を一瞬で行うことができます.この便利さは GUI では決して達成できないものです.
シェルの詳しい文法については, bash の場合は 

man bash return2
として読めるマニュアルに記述されているほか,ウェブ上や書籍にも豊富に情報がありますので,それらを参照してください.