初めてのスクリプトを作成する

LinuxBeginner
オンラインで実践に進む

はじめに

自動化の世界へようこそ!

料理人を想像してください。毎回すべての料理を記憶だけを頼りに手作業で作る代わりに、レシピを書き残します。厨房のスタッフはそのレシピに従って、あなたがすべての工程を監督しなくても、何度でも同じように料理を完成させられます。

Linux では、スクリプトがこのレシピにあたります。スクリプトは、shell が読み取り、記述された順番に実行できるコマンドを含むプレーンテキストファイルです。これは Unix および Linux システムにおける、最も古く、重要な自動化の方法の 1 つです。

Shell scripting が普及したのは、最新の構成管理ツールが登場するずっと前から、管理者が繰り返し作業を自動化する軽量な方法を必要としていたためです。現在でも、多くの本番システムが、セットアップ、メンテナンス、トラブルシューティングに小さな shell スクリプトを利用しています。

この入門実験では、最初のレシピを書いてみます。次の作業を行います。

  1. 下書き:スクリプトファイルを作成します。
  2. 記述:手順(コマンド)を追加します。
  3. 実行を許可:ファイルに実行権限を付与します。
  4. 実行:新しいプログラムを実行します。

スクリプトファイルを作成する

まず、レシピを書くための白紙を用意します。Linux では、スクリプトは単なるプレーンテキストファイルです。

Linux ではファイル拡張子の使用を強制されませんが、shell スクリプトに .sh を付けるのは便利な習慣です。Linux 自体はファイル名の拡張子よりも、ファイルの内容と権限を重視します。それでも、.sh を付けておくと、人間がそのファイルの役割をすぐに見分けられます。

これは Unix における重要な考え方です。ファイルは通常、名前よりも、その内容と設定された権限によって識別されます。スクリプトは、グラフィカルウィザードによって作成される特別なファイル形式ではありません。Bash などのプログラムが 1 行ずつ読み取れる、単なるテキストファイルです。

プロジェクトディレクトリに、hello.sh という空のファイルを作成します。

まず、正しい場所にいることを確認します。

pwd

次に、touch コマンドを使います。このコマンドは、白紙を 1 枚用意する操作に相当します。

touch hello.sh

ファイルが作成されたことを確認するため、現在のディレクトリの内容を表示します。

ls

hello.sh が表示されれば、ファイルは作成されています。

スクリプトの内容を書く

次に、実際のレシピを書きます。ただし、その前に特別なヘッダーを追加する必要があります。

スクリプトを手紙にたとえてみましょう。手紙を正しい相手に宛てる必要があるように、Linux ではスクリプトの 1 行目で、どのプログラムがその内容を読み取るかを指定します。この行を Shebang(#!)と呼びます。

今回は Bash shell でスクリプトを読み取るため、宛先として /bin/bash を指定します。また、echo という簡単な命令も追加します。このコマンドは、コンピューターに指定した文字列を画面へ表示させます。

shebang は、最も古く、実用的な Unix の慣習の 1 つです。スクリプトをプログラムとして実行すると、オペレーティングシステムは 1 行目を読み取り、ファイルを処理する interpreter を決定します。Interpreter とは、コンパイル済みのバイナリを直接実行するのではなく、命令を読み取って実行するプログラムです。

nano エディターで空のファイルを開きます。

nano hello.sh

次の 2 行を、表示されているとおり正確に入力します。

#!/bin/bash
echo "Hello LabEx"

内容を確認しましょう。

  • #!/bin/bash:「宛先ラベル」です。Linux に対して、この命令を Bash プログラムへ渡すように指示します。
  • echo "Hello LabEx":「命令」です。Bash に Hello LabEx を画面へ表示するように指示します。

shebang がなくても、bash hello.sh のように bash を明示して実行すれば、スクリプトが動作する場合があります。この場合は、実行時に interpreter を手動で選択しているためです。一方、./hello.sh のように実行する場合は、ファイルをどのプログラムで処理するかをシステムに伝える標準的な方法として shebang を使用します。

保存して終了する

  1. Ctrl + O を押して保存します。
  2. Enter を押して確定します。
  3. Ctrl + X を押して終了します。

cat を使ってファイルの内容を読み取り、入力内容を確認します。

cat hello.sh

スクリプトを実行可能にする

レシピは書けましたが、現時点ではまだ紙に書かれた内容にすぎません。Linux には厳格なセキュリティポリシーがあり、テキストファイルは明示的に権限を付与しない限り、プログラムとして実行できません。これにより、買い物リストを誤ってコードとして実行することを防げます。

実行のロックを解除する「鍵」が必要です。権限(mode)を変更するコマンドは chmod です。今回追加する鍵は +x(実行権限の追加)です。

この操作でファイルの内容が変わることはありません。Linux が各ファイルについて保持しているメタデータの一部である、ファイルの mode bits を変更します。つまり、chmod +x はスクリプトを「よりスクリプトらしく」する操作ではなく、そのファイルをプログラムとして実行してよいとシステムに伝える操作です。

スクリプトに実行権限を付与します。

chmod +x hello.sh

権限が変更されたことを確認します。

ls -l hello.sh

左側に表示される権限を確認してください。x が含まれていれば成功です(例:-rwxr-xr-x)。端末の設定によっては、ファイル名が緑色で表示されることもあります。これは、そのファイルを実行できることを示しています。

スクリプトを実行する

いよいよ、レシピを実行します。

現在のディレクトリにあるスクリプトを実行する場合は、対象を明示する必要があります。hello.sh とだけ入力してはいけません。./hello.sh と入力します。

  • . は「現在のディレクトリ」を意味します。
  • / は区切り文字です。

したがって、./hello.sh は文字どおり「現在のディレクトリ内にある hello.sh というファイルを実行する」という意味です。

この点は、多くの初心者にとって意外かもしれません。shell は通常、コマンド名だけを入力した場合、PATH 変数に登録されたディレクトリだけを検索します。安全上の理由から、現在のディレクトリは通常、自動的には検索されません。そのため ./ が重要になります。./ を付けることで、shell に別の場所でコマンドを検索させるのではなく、明示的なパスを指定できます。

スクリプトを実行します。

./hello.sh

すべて正常に進んでいれば、次の出力が表示されます。

Hello LabEx

おめでとうございます。あなたは単なる Linux ユーザーではなく、Linux プログラマーになりました。初めての自動化スクリプトを作成し、実行権限を付与して、実際に実行できました。

まとめ

よくできました。重要な力を 1 つ身につけました。

今回学んだ「スクリプト作成の流れ」を振り返りましょう。

  1. 下書き:touch またはエディターを使ってファイルを作成します。
  2. コードを書く:#!/bin/bash ヘッダーとコマンドを追加します。
  3. ロックを解除:chmod +x を使い、Linux がファイルを実行できるようにします。
  4. 実行:./scriptname.sh の形式で実行します。

小さな例に見えるかもしれません。しかし、Web サーバーからスーパーコンピューターまで、規模の大きな自動化システムのセットアップも、このような単純なスクリプトから始まります。