シェルスクリプトとは【Linux入門者&新人SE向けに解説】

bash IT業界(SIer) プログラミング

シェルスクリプトについて調べる人
「シェルスクリプトってなんでしょうか?具体的に、簡単な使い方も知りたいです。開発の現場では、シェルスクリプトをどういう時に使うのでしょうか。」

こんな悩みを解決します。

シェルスクリプトはLinuxやUnixで用いられている簡易的なプログラミング言語です。

UnixやLinuxにはもともとWindowsやMacのようにマウスで操作するグラフィカルなインターフェースがなく、シェルを用いてコマンドを打ち込んで使っていました。

ターミナル上のシェルからのコマンド実行例
ターミナル上のシェルからのコマンド実行例

入力したコマンドがOSで実行されるまでの処理イメージ
OS、カーネル、シェルの関係

最近ではWindowsやMacでも使えるようになっています。

本記事の内容

  • シェルスクリプトはOSと会話するための言語
  • 開発現場でシェルスクリプトはどのような目的で使われているか?

この記事を書いている私は社会人歴12年のITエンジニアです。現在の年収は1,000万円ちょっと。

シェルスクリプトを実務で使っています。業務で自分でコーディングすることはありませんが、自分がリーダを務めるチームで100本のシェルスクリプトを修正する仕事とか、割とあります。

そうした実務の経験を踏まえ、シェルスクリプトとは何かを解説します。

シェルスクリプトについて調べている人の助力になりましたら幸いです。

シェルスクリプトはOSと会話するための言語

シェルスクリプトはOSと会話するための言語

シェルスクリプトはもともと、OSとユーザが会話するために作られた簡易的な言語です。

シェルスクリプトは、グラフィカルな操作ができるようになった今も、サーバのメンテナンスやバッチ処理のために広く使われています。

コマンドを束にして実行する


シェルスクリプトでは、カーネルに対して発行するコマンドを束にして命令することができます。まずは1つ1つ個別にコマンドを実行した例です。

シェルからのコマンド実行例(lsとcpコマンド)
シェルからのコマンド実行例

これらのコマンドを1つのファイルに束ねたシェルスクリプトは以下の通りです。

シェルスクリプトのコーディング例1

上の例では、次の一連の処理を行なっています。一行目の「#!/bin/bash」については後ほど解説することとし、2〜4行目の①〜③について解説します。

  • ①ファイル一覧を取得
  • ②file1.txtをコピーして、backup.txtを作成する
  • ③コピー後、ファイル一覧を再取得

ファイルを保存して実行すると権限(Permission)エラーとなってしまいます。
permission denyエラーとなる

chmodコマンドを用いて、シェルスクリプトファイルに実行権限を付与します。
chmodでシェルスクリプトに実行権限を付与する

無事実行できました。

#!/bin/bashってなに?

シェルスクリプトのコーディング例2

先ほどの例の1行目の#!/bin/bashってなんでしょう。

これは、「/binディレクトリにあるbashを使ってスクリプトを実行しろ」という意味です。

実はLinuxでは様々なスクリプトファイルがあり、代表的なものはbashやtcshです。それ以外にも複数のシェルがありますし、シェルスクリプト以外にもawkなど様々なスクリプト言語があるのです。

Windowsでは.txtや.htmlなどの拡張子でどのプログラムでそのファイルを実行するか決定しますが、Linuxではスクリプトファイルの1行目に書かれたプログラムでスクリプトを実行します。

ルール:Linuxのスクリプトファイルは、1行目に「#!」+「スクリプトを実行するプログラムのパス」を記述するのがルールです

ですから、先の例のスクリプトをbashではなくtcshで処理したい場合には次のように記述します。(tcshでも実行結果は変わりません。)

シェルスクリプトのコーディング例3

シェルスクリプトのデバッグ

シェルスクリプトを開発するときに便利なのがデバックモードです。シェルスクリプトファイルの実行結果を、1行1行表示してくれます。

やり方は簡単で、bashやtcshなどのシェルを指定して、-xオプションとシェルスクリプト名を引数にして実行します。

シェルスクリプトのデバック実行結果
シェルスクリプトのデバッグ

開発現場でシェルスクリプトはどのような目的で使われているか?

開発現場でシェルスクリプトはどのような目的で使われているか

なぜシェルスクリプトを使うのか?

ファイルのコピーなら、windowsのエクスプローラでもできます。ではなぜIT企業ではシェルスクリプトを使うのでしょうか?理由は簡単、エクスプローラよりもシンプルだから。具体的に解説します。

理由1:自動実行しやすい

手でその都度作業するならエクスプローラでやればいいのですが、日次や週次など定期的に動かしたい処理は自動化したいです。そういった場合、シェルスクリプトが有効です。また、このような定期・不定期の自動実行処理のことをバッチ処理と呼びます。

人間の手を介さずに操作しますので、グラフィカルな画面は不要で必要なコマンドだけを記述した方がシンプルで間違いが起きにくいのです。

バッチの自動実行にはジョブスケジューラやcronを使います。
参考:バッチ・ジョブスケジューラの解説
参考:cronの解説(外部リンク)

理由2:再利用性が高い

シェルスクリプトはコマンドだけのシンプルな命令なので、再利用性が高いです。

例えばサーバAで行なっているバックアップ処理をサーバBに移植したり、社内で標準的に使われるバッチ処理を整備して各システムに展開することも可能です。

例1:製品やハードウェアの再起動

シェルスクリプトは、ApacheやTomcatに代表されるサーバ製品の再起動や、OSそのものの再起動を実行するのによく用いられます。

例2:複数のファイルを圧縮してバックアップする

WEBサーバやAPサーバをはじめとして、様々なサーバのログを圧縮してバックアップする際、シェルスクリプトが使われることが多いです。また圧縮せずに、ファイル名をバックアップ用にリネームだけする処理もよく用いられます。

例3:データベースの更新

定期的なデータベースのメンテナンスにもシェルスクリプトがよく使われます。例えばテーブルの再定義や、不要なレコードの削除、更新などです。

これらはデータベースを操作するための言語であるSQLが用いられますが、シェルスクリプトからSQLが実行されるのが一般的です。

また、シェルスクリプトの代わりにJavaなどが用いられることもあります。

実践的なシェルスクリプトの例

簡素なシェルスクリプトしか例示してませんでしたので、実践的な例として複数のLinuxディレクトリ領域をNASにバックアップする例を示します。

この例のように、コマンドだけではなく変数(下例におけるbackup_filesやdest,dayなど)を用いて、汎用的なスクリプトを作成する事が可能です。

シェルスクリプトのコーディング例4

今回は以上です。シェルスクリプトについて解説しました。開発の現場では、シェルスクリプトはジョブスケジューラから実行されて使われるのが一般的です。

ジョブスケジューラについてはこちらの記事をご覧ください。

参考:バッチ処理の例とその解説【バッチ歴12年のSEが超初心者向けに解説】

学習にはLinuxを用いるのが一般的ですが、Macにも標準で使えます。Windowsの場合はセットアップが必要です。また、Raspberry piにraspbianというフリーのLinuxを導入することができ、1万円程度でコンパクトで最新のLinuxマシンが手に入るのオススメです。参考になりましたら幸いです。