シェルとは

シェルとは何かを知る為の前提知識

シェルとは何かを理解するためにはOSの知識が必要です。OSとはオペレーションシステムのことで、PCのハードウェアとソフトウェアを管理してくれる基本システムです。OSが入ってなければPCもスマホも動きません。私達が当たり前の様にPCでwebサイトを閲覧したり、スマホでアプリケーションが動くのはこのOSが裏で動作しているからなのです。OSにはWindowsやMac、AndroidOSがあります。そしてこのOSにはカーネルと呼ばれる心臓部分があります。こういった仕組みでOSがあることを知っておきましょう。その上でシェルとは何かが理解できてくるでしょう。

シェルとは何か?

シェルとはLinuxなどのOSにおける核であるカーネルに要求を出すプログラムのことです。Linuxの中核であるカーネルは、LinuxOSを支える沢山のプログラムによって構成されています。ユーザーはこれらのプログラムの集まりに必要な動きを命令することで、Linuxをコンピューターとして利用しているのです。ユーザーによる命令は直接カーネルに渡されるのではなく、まずシェルが受け取ります。シェルは受け取った要求をカーネルがわかるものに翻訳してカーネルに渡します。そしてカーネルは、シェルから受け取った翻訳済みの命令を実行するという流れです。シェルは、カーネルを包む殻のようなポジションであることから、シェルと呼ばれています。
また、近年のコンピュータはGUIで利用することが多く、ログインするとGUIの環境を利用することができます。ひと昔前はCUIのためのターミナルを起動しなければいけませんでしたが、近年のコンピューターはCUIのターミナルを立ち上げずともマウス操作で簡単に様々な処理を行えます。しかし、このマウスによる操作もカーネルを通して命令を出されています。ということは、GUIの環境もカーネルの周りを覆っているシェルと言えます。
ただし、この記事では従来のUNIXやLinuxの操作を解説していきますので、この中でシェルと言えばプロンプトでコマンドを入力するCUIのシェルのことを指している、と留意してください。

シェルスクリプトとは

よくシェル関連で調べ物をすると、シェルスクリプトという言葉が出てくると思います。これはシェルと同じ意味ではなく、組み立てられたコマンドひとかたまりの事をシェルスクリプトと呼びます。つまり、シェルとシェルスクリプトは別のものです。一般的にシェルを扱うことが出来る人は、シェルスクリプトを扱うことができる人のことを呼びます。シェルスクリプトではif文、for文、while文、case文なども使うことが出来るので、バッチ処理を操るシェルスクリプトをプログラミングすることもできます。ですので、1種のプログラミング言語のような扱いを受けています。

シェルスクリプトの種類

シェルスクリプトにも様々な種類があります。代表的なものを例にあげるとsh:Bourne shell、bash:Bourne-Again shell、csh:C shell、ksh:Koran shellなどがあります。Linuxでは主にshやbashが特に使われます。これからこれらの2つの特徴について詳しく説明していきます。

sh(Bourne shell/Bシェル)

sh (Bourne shell/Bシェル)は、AT&Tベル研究所のスティーブン・ボーン氏が1977年に開発したシェルのとこです。コマンド名はshです。現在では一般的なシェルプログラムとして多くの人に使用されているシェルです。Bシェルの特徴としては、コンパイルを不要なこと、初めて変数などが利用できるようになったシェルスクリプトであることなどが挙げられます。
過去のシェルに比べるとプログラミングの要素を多数取り入れており、シェルスクリプトを組みやすくなったシェルという見方もできます。

bash(Bourne-Again shell)

bash(Bourne-Again shell)は、sh(Bourne shell/Bシェル)を核として、追加で様々な機能が拡張されたシェルです。Linuxでもbashは人気となっています。bashはsh(Bourne shell/Bシェル)と互換性があります。Bシェルに比べて更に複雑なシェルスクリプトを組むことが可能なので、より複雑なシェルスクリプトを組みたい人に向いていると言えるでしょう。

実際にシェルスクリプトを使うシーン

ここまで、シェルの大まかな説明と種類について説明してきました。しかし、具体的にシェルとはどういう場面で使うものなのかがイメージできない人もいるかもしれません。これから具体的にシェルを使う場面や機能について解説していきます。

logの吐き出し

Linuxで動かすものの代表的なものとして、サーバーがあります。サーバーで何かトラブルが起きた時や、正しく動作しているか確認するときにはlogを確認する場面があるでしょう。そんな時にlogを吐き出すシェルスクリプトを組んでおくと迅速にトラブルを解決することに繋がります。logを吐き出させるたびに単発のコマンドで確認するのは非効率ですので、こういった場面でシェルスクリプトは役に立ちます。

疎通確認

Linux上で稼働するサーバーは常に疎通していなければいけない機器があります。バックアップ用のサーバーなどと疎通しており、単体で使うことはあまりありません。これらの機器と正しく疎通されているかを確認する為にもシェルスクリプトは活用されます。一定の感覚で疎通機器にping(疎通確認のコマンド)を飛ばして、返答がなければ通知をするといった確認方法で、これにより疎通が正しくされていないとすぐに気づくことができるようになっています。

その他のシェルの使い道

上記で述べたもの以外にもシェルを使う場面はあります。その例として挙げられるのは、コンピュータプログラム、ソフトウェアの実行状態の管理やストレージ、または外部記憶装置とも呼ばれるものの管理があります。コンピュータプログラムの管理ではプログラム名やアイコンを指定してプログラムを起動したり、起動パラメータや環境変数などを指定して動作モードを変更したり、実行中のプログラムを終了させたりすることができます。ストレージ管理は、ストレージ内に収められたファイルやディレクトリと呼ばれるファイルを一覧に表示させたりすることができます。また、新しいファイルなどを作成したり、別の場所や装置に複製、移動したり、削除したりすることもできます。

シェルの実行方法

シェルの実行方法はスクリプトをテキストで記述をして実行権限を与え、実行するという方法になります。この手順のなかで機械語への翻訳作業であるコンパイルは存在しません。Javaなどのプログラミング言語ではコンパイルしないと実行できませんが、シェルはコンパイルの必要はありません。その理由はシェルがインタプリタだからです。コマンド、変数、制御文などを上から順番に解釈しながら順を追って実行していきます。インタプリタはコンパイルがないので、即実行結果がわかるという特徴があります。逆ににコンパイル型の言語に比べて速度が落ちるという側面もありますので、大規模な開発でシェルスクリプトを使わないほうがいいでしょう。

シェルの機能の概要

これまで具体的なシェルの使われ方や実行方法について解説していきました。シェルがどんな場面で使われるのかイメージが着いた後はシェルの機能について解説します。具体的な使い方は割愛しますので、機能の概要を見て使われ方を想像してみるのが良いでしょう。シェルの機能にはコマンドの解釈、実行やコマンド履歴の記録やコマンド入力の編集、入力の支援やコマンド入出力ファイルの切り替えや、コマンド入出力の連結や、メタキャラクタの解釈や環境設定、ジョブ管理などがあります。具体的な使い方を知りたい方は書籍や教材で学習してみてください。

まとめ

いかがだったでしょうか。これまでシェルを知る上で必要なOSの知識やシェルとは何かといった解説、そしてシェルスクリプトとの違いやシェルの種類、使い道、実行方法、機能の概要について解説してきました。どうしてもプログラミングを学習するときにJavaなどのメジャーなものから勉強し、GitやシェルやSQLやLinuxなどの勉強を後回しにしがちです。幅広く学習することで全体のイメージが着いてくると思うので、ある程度プログラム言語の勉強が終わったらこういった周辺知識の勉強も行ってみると良いでしょう。現場では知っていなければ困ることが多いのでこれらの周辺知識について全く知らないという状態になっていないことが望ましいです。本記事でシェルに触れ、シェルを使いこなすきっかけになれば幸いです。最後までお読みいただき、ありがとうございました。