シェルの大きな魅力の1つが「シェルスクリプト」です。よく実行するコマンドをまとめたり、繰り返し処理を簡単に行ったりするなど、さまざまな形で応用できます。今回は、準備編として、シェルスクリプトの基礎となる文法を解説します。
「シェル」(本連載第3回参照)に実行させたい操作は、あらかじめテキストファイルにまとめておくことができます。これを「シェルスクリプト」と呼びます。いわば、“シェル用の台本(スクリプト)”です。
シェルスクリプトには、毎回使いたいオプションやコマンドの組み合わせを記述しておく他、条件分岐や繰り返しなどの「制御構文」を使って複雑な処理を行ったり、定期的に自動実行できるようにしたりしておくなどの用途があります。
本連載ではLinuxの標準シェルである「bash」によるシェルスクリプトについて、制御構文を中心に解説します。
bashはmacOSの標準シェルでもあり、Windows 10でも使用できるようになりました。シェルスクリプト内で使用できるコマンドに多少の違いはありますが、実行方法や制御構文などは共通です。Windows 10でのbashの使用方法は、次回詳しく解説します。
シェルスクリプト自体は、ただのテキストファイルです。端末では「vi」(本連載第18回参照)や「nano」などのテキストエディタを使って作成、編集することができます。もちろん、GUI(Graphical User Interface)環境用のテキストエディタを使っても構いません。
nanoはシンプルなテキストエディタで、多くのOSにインストールされています。CentOSでは「yum install nano」、Ubuntuでは「apt install nano」でnanoコマンドをインストールできます(どちらもroot権限が必要です)。macOSやWindows 10のUbuntu環境にもデフォルトでインストールされており、同じように使用できます。
「nano ファイル名」と実行すると、編集画面が開きます。指定したファイルが存在しない場合は新規作成されます。保存などの操作については、画面下部に「ガイド」が表示されます。この後の実行例を参考にしてください。
bash用のシェルスクリプトに限らず、スクリプトは全て「bash ファイル名」のように、スクリプトを処理するコマンド(ここではbash)と、スクリプトが記述されたファイルを指定することで実行できます。簡単なテストや取りあえず実行できればよいという場合は、この方法がお手軽です。
なお、スクリプト名だけで処理を実行できるようにする方法もあります。一般的に「スクリプトを実行する」という場合は、こちらを指します。手順は以下の通りです。
(1)スクリプトの1行目で実行コマンドを指定する(#!〜)
(2)実行可能属性を追加する(chmodコマンド)
(3)PATHの通った場所に配置、またはパス付きで実行する
スクリプト名だけで処理を実行できるようにするには、スクリプトの1行目で“スクリプトを実行するコマンド”をフルパスで指定します。
bashの場合は「/bin/bash」です。コマンドのパスは「type」コマンド、または「which」コマンドで確認できます。
それでは、「Hello!」というメッセージを表示するシェルスクリプト「hello」を作成してみましょう。
まず、スクリプトを実行するコマンドを、スクリプトの1行目に「#!」に続けて記述します。この行は「shebang」(sharp-bang、シバンまたはシェバン)と呼ばれています。
実行したい内容は2行目以降に記述します。ここでは「echo "Hello!"」で「echo」コマンドを実行しています。
#! /bin/bash (シェバン行) echo "Hello!" (/bin/bashに実行させる内容)
以下の画面1では、「nano hello」でカレントディレクトリにhelloスクリプトを作成しています。
画面下部の表示は「キー操作 意味」となっており、「^」はコントロールキーを示しています。例えば、「^G Get Help」は[Ctrl]+[G]キーでヘルプを表示、「^X Exit」は[Ctrl]+[X]キーで終了という意味になります(画面2)。
続いて、「chmod」コマンドで実行可能属性を追加します。
chmod +x hello
(カレントディレクトリのhelloに実行可能属性を付ける)
実行可能属性を付ける操作は一度だけで、スクリプトを編集した場合でも再度chmodコマンドを実行する必要はありません。
1行目に「#!〜」行が記述されていて、実行可能属性が付いたスクリプトファイルは、スクリプト名だけで実行できるようになります。ただし、コマンドラインではスクリプトファイルのパスも指定する必要があることに注意してください。
例えば、カレントディレクトリに置かれた「hello」というスクリプトであれば、「./hello」のように指定します(画面3)。
./hello
(カレントディレクトリにあるhelloを実行)
練習用に試す場合はこの方法がよいでしょう。
日常的に使用したいシェルスクリプトは、自分専用の場合はホームディレクトリ下の「bin」ディレクトリ(~/bin)、他のユーザーでも実行する場合は「/usr/local/bin」を使用するのが一般的です。
以下の実行例では「mkdir」コマンドでホームディレクトリに「bin」ディレクトリを作成し、「mv」コマンドで先ほど作成したhelloスクリプトを移動しています。
mkdir ~/bin
(ホームディレクトリに「bin」がない場合は作成)
mv hello ~/bin/
(helloスクリプトを「~/bin」に移動)
※テスト用のスクリプトの場合は「./hello」のような実行でよいのでこの操作は不要
PATHと実行権限の詳細については、本連載第8回を参照してください。
次回は、Windows 10でbashスクリプトを試す方法を紹介します。
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.