1. HOME
  2. Geekly Media
  3. Linuxのシェルとは?スクリプトの書き方や実行をわかりやすく解説

Linuxのシェルとは?スクリプトの書き方や実行をわかりやすく解説

Linuxのシェルは、効率よいサーバーを操作・運用するために欠かせません。これからサーバー管理をしたい方、もっと手軽に操作できる環境設定をしたい方は、Linuxのシェルスクリプトを活用しましょう。この記事では、初心者向けにLinuxシェルの書き方や実行までわかりやすく解説します。

  • twitter
  • facebook

Linuxシェル(Shell)とは?

 

 

Linuxのシェルとは、Linuxの中核であるカーネルとユーザーの間を仲介する役割です。

ユーザーが打ち込んだコマンドをOSの核であるカーネルに伝え、動作で応えるプログラムであり、コマンドインタプリタとも呼ばれます。

サーバー管理を行うエンジニアにとって、Linuxシェルの知識は欠かせません。

 

カーネルとユーザーを繋ぐインターフェイス

 

シェルは、LinuxOSの核であるカーネルとユーザーを繋ぐインターフェースの役割を担っています。

Linuxのカーネルという心臓部は、LinuxOSを支える多数のプログラムによって構成されています。

ユーザーはこれらプログラムの集合体に必要な動きを要求することで、Linuxをコンピューターとして利用できる仕組みです。

ユーザーによる要求はまずシェルが受け取り、シェルは受け取った要求を翻訳してカーネルに渡します。

そしてOSの中核に位置するカーネルは、シェルから受け取った翻訳済みの要求を実行しています。

シェルは、カーネルを包む「殻」のようなポジションであることから、英単語の「Shell」、つまりシェルと呼ばれるようになりました。

 

シェルスクリプトは要求コマンドのかたまり

 

一般的に「シェルを使える」という技術は、「シェルスクリプトを書くことができる」という意味で使われます。

シェルに対するコマンドを理解し、一連の要求をコマンドで組み立てることができるという意味です。

組み立てられたコマンドのひとかたまりを「シェルスクリプト」と言います。

シェルスクリプトは一種のプログラミングです。

コマンドの羅列はもちろん、以下のような条件分岐やループ文などが利用できます。

 

・if文
・for文
・while文
・case文

 

これらを駆使して、Linux運用におけるバッチ処理などを操るシェルスクリプトをプログラミングすることが可能です。

 

\ IT転職のプロが無料でサポート! /

キャリア相談をしてみる

 

Linuxシェルの具体的な役割と機能

 

 

 

シェルの役割は、ユーザーの要求をカーネルに伝えることです。

ユーザーは基本的に、ターミナルからLinuxに接続し、コマンドを入力することでLinuxを操作します。

ターミナルとは、CUIコマンドを受け付けるための画面で、イメージとしてはハッカーが使う黒い画面です。

例えば、今現在ユーザーが見ているディレクトリである「カレントディレクトリ」を確認する要求を、具体的な動作と順番で整理すると次のようになります。

 

  1. ユーザーがPC上でターミナルを開く
  2. ターミナル上で「pwd」コマンドを入力
  3. エンターキーで決定
  4. 「pwd」コマンドがシェルに渡される
  5. シェルが「pwd」コマンドの意味を「カレントディレクトリの表示要求」と解釈する
  6. シェルは「カレントディレクトリの表示要求」をカーネルに伝える
  7. カーネルは「カレントディレクトリ」をシェルに伝える
  8. カーネルから教えてもらった「カレントディレクトリ」をシェルがターミナルに表示する
  9. ユーザーはターミナルに表示されたカレントディレクトリを確認する

 

一つの要求コマンドでは、簡単にイメージするだけでもこれだけの動作が行われており、その中でも、シェルはユーザーとカーネルの間で重要な役割を果たしていることが分かります。

 

\ 自分に合う働き方が分かる! /

仕事タイプ診断をする

 

 

Linuxシェルの種類

 

 

代表的なLinuxシェルの種類とコマンドを解説します。

 

シェル名 コマンド 概要
 Bourne Shell
(Bシェル)
 sh  最も古く、bashなどの基となった
 C Shell csh  shを基にアレンジされ、配列が可能
 TENEX C
 Shell
tcsh  cshを基にインターフェース部分を拡張
 Korn Shell ksh  shの上位互換
 Bourne
 again Shell
bash  shを基に機能拡張、オープンソース版
 Z Shell zsh  tcsh、ksh、bashの機能を一部採用
 Friendly
 interactive
 shell
fish  オートコンプリート機能を搭載

 

以下、それぞれ詳しく解説します。

 

sh(ボーンシェル /Bシェル)

 

sh (Bourne shell /Bシェル)は、AT&Tベル研究所のスティーブン・ボーン氏が1977年に開発したシェルで、コマンド名を「sh」としています。

Bシェルとも呼ばれており、標準的なシェルプログラムとして広く使用されているシェルです。

コンパイルを不要とし、変数などが利用できるようになったものBシェルが初めてです。

それまでのシェルに比べるとプログラミング要素を多く取り入れており、シェルスクリプトを組みやすくなったシェルでもあります。

 

csh(シーシェル)

 

csh( C Shell)はshが基になったUNIX系OSのためのシェルです。

スクリプトがプログラミング言語のC言語に似た文法の構造をしており、sh、bashなどとは異なる系統として位置づけられています。

配列が使用可能な点も大きな特徴です。

 

tcsh(ティーシーシェル)

 

tcsh(TC Shell /TENEX C Shell)は、cshの機能が拡張されたものです。

頭文字のTは、TENEXならびにTOPS-20に由来しています。

入力補完機能やスペルの訂正機能、C言語ソースコードの簡単な文法チェックが行えるなどの機能が備わりました。

 

ksh(コーンシェル)

 

ksh(Korn Shell)は、1980年代後半に開発されたUNIX系OS用のシェルです。

Bシェルの機能を包含し、より動作が高速であること、C言語に似た制御構造を持っていることなどが特徴です。

 

bash(ボーンアゲインシェル)

 

bash(Bourne-Again shell)は、Bシェルをベースに様々な機能が拡張されたシェルです。

Linuxでもbashが多く使われています。

bashはBシェルと互換性がありますが、更に複雑なシェルスクリプトを組むことが可能です。

 

zsh(ズィーシェル)

 

Bシェルの改良版として登場したのがzsh(Z Shell)です。

tcsh、ksh、bashなどの機能が取り込まれ、bashの上位互換として位置づけられています。

テーマやプラグインによるカスタマイズが豊富な点が特徴です。

 

fish(フィッシュ)

 

fish(Friendly interactive shell)は、ユーザーフレンドリーなシェルとして、多機能さと分かりやすさを備えています。

対話的に操作できる点が特徴で、例えばコマンドを入力することで予測を表示するオートコンプリート機能や、過去の履歴表示といった機能が特徴です。

 

\ IT転職のプロが無料でサポート! /

キャリア相談をしてみる

 

 

Linuxシェルスクリプトの具体例

 

 

ここで、シェルスクリプトの具体例を見ていきましょう。

基本的にはコマンドの羅列で、書いた順番に上から下へ実行されるインタプリタ型です。

そのため、実行したい機能の流れとコマンドをしっかりと理解していれば、複雑なロジックはほぼ不要です。

 

シェルスクリプトの記述方法

 

ここでは例としてbashを利用します。

以下、bashを利用して「Hello World」を表示させる方法です。

 

#!/bin/bash echo “Hello World” exit 0

 

1行目:「bash」を利用するため、bashへのパスを宣言しています。
2行目:「Hello Warld」を表示することを要求しています。
3行目:シェルスクリプトの正常終了を意味しています。

 

シェルの実行方法

 

シェルスクリプトを書いたら、ファイルを保存しますが、拡張子は「.sh」です。

例えば、ファイル名を「hello.sh」とした場合は、実行時に以下のようなコマンドを入力します。

 

# bash hello.sh

 

ただし、実行前にシェルスクリプト自体の実行権限を変更し、実行ファイルとしての許可を与える必要があります。

 

\ IT転職のプロが無料でサポート! /

キャリア相談をしてみる

 

 

Linuxシェルスクリプトを使うと便利なシーン

 

 

実際にシェルスクリプトを使うと様々なシーンで作業の効率化を図ることができます。

その中でも、代表的なシェルスクリプトの使い方を見ていきましょう。

 

logの吐き出し

 

Linuxで稼動させるものはサーバーです。

例えばWebサーバーであれば、ページが表示されなかったり、特定のプログラムが読み込めずにページの一部が欠落したりというトラブルがあります。

そんな時、サーバーのlogを吐き出すシェルスクリプトを仕込んでおくと便利です。

サーバーエンジニアは、トラブルがあれば最初にlogを確認します。

そこにはサーバー上で起こるイベントのほとんどが記載されていますが、その中から特定のエラーコードや文字列を定期的に別ファイルへ吐き出すことで、迅速なトラブル解決が可能になります。

これらの作業を単発のコマンドで毎回確認するのは非効率です。

そこで、シェルスクリプトをあらかじめ作っておくことで、そのシェルスクリプトを実行するだけで原因の特定を効率的に進めることができます。

 

疎通確認

 

Linux上で稼動するサーバーには、常に疎通しておくべき機器が多数存在します。

特にバックアップ用のサーバー(セカンダリサーバーなど)は、実際に稼働しているサーバーと常に同期を取りながら運用するものです。

それら機器との疎通が取れているかを常に監視する機能も、シェルスクリプトで作成可能です。

一定の間隔でping(疎通確認コマンド)を飛ばしながら、応答が無い機器があった場合に通知するなど、シェルスクリプトを実行しておくことで、突然ダウンした機器をすぐに察知し対処することができます。

 

\ IT転職のプロが無料でサポート! /

キャリア相談をしてみる

 

 

スクリプト言語を利用する際には

 

 

  Kornシェルは、スクリプト言語で用いる高度な機能を備えています。

例えば、JavaScriptが有効なウェブサイトの構築、膨大なデータの数値化を行う場面で有用です。

因みに、多様なオペレーティングシステムに対応しているため、トラブルが発生した時のリスクを軽減しやすいでしょう。  

 

環境変数PATHの設定

 

シェルスクリプトを実行する時、プログラムの名前と場所を入力・指定する必要があります。

しかし実行する度、入力・指定する作業を簡易化するために役立つのがPATHの環境変数です。  

まず「echo」コマンドを活用し、環境変数PATHを表示させます。次に「export」コマンドで環境変数を設定しましょう。

この時「:」で区切れば、複数のプログラムの名前を登録可能です。

ただし、探索の優先順位を一律にすることはできません。先頭に記されたものほど、優先的に探索されます。  

 

コマンドの出力先をファイルに変える

 

  通常コマンドを実行した結果は、ディスプレイに標準出力されます。

もしも出力先をファイルに切り替える時には、リダイレクション記号が役立つでしょう。

以下にリダイレクション記号の使い方と種類を紹介します。  

 

入力するリダイレクション記号が1個の場合、コマンドの実行結果を指定したファイルに上書きします。その代わり、既に書き込まれている内容が全て消去されるため、ファイルの指定には要注意です。  

 

>>

入力するリダイレクション記号が2個の場合、コマンドの実行結果が指定したファイルの最下行に追加する形で出力されます。

上記、いずれもコマンドの後に続けて入力し、出力先のファイルの名前を指定します。なお、書き込みの対象となるファイルが存在していなかったとしても、自動的にファイルが新規作成され、実行結果を残すことが可能です。  

 

コマンドの入力

 

シェルがbashの場合、ショートカットキーを活用して作業を進められます。

ポピュラーなショートカットキーは、以下の通りです。  

 

CtrlプラスA

カーソルを入力した文字列の先頭に移動させます。  

 

CtrlプラスE

カーソルを入力した文字列の最後尾に移動させます。  

 

CtrlプラスH

カーソル左側に入力されている文字を削除します。  

 

CtrlプラスD

カーソルの上方に入力されている文字を削除します。  

 

Tab

入力の途中で押すことによって、自動的に文字列が補完されます。   上記の他にも色々なショートカットキーがあります。UNIXを導入する折、一通り覚えておくと便利でしょう。  

 

\ IT転職のプロが無料でサポート! /

キャリア相談をしてみる

 

 

Linuxシェルをサーバー運用に役立てよう

 

 

シェルは、Linuxのカーネルとユーザーを繋ぐインターフェイスであり、カーネルの「殻」のポジションを担います。

ユーザーがターミナルを使ってコマンドを実行した際には、シェルがカーネルに要求を伝え、カーネルから返ってきた結果をユーザーに伝える役割を担い、「シェルスクリプト」を作成することで複雑なバッチ処理などをコマンド一つで実行することも可能です。

Linuxをメインに利用するサーバーエンジニアにとって、シェルを理解することは必要不可欠な知識です。

 

「エンジニアとして上流工程に携わりたい」

「IT業界に転職して年収を上げたい!」

「もっとモダンな環境で働きたい!」

 

などのキャリアのお悩みは是非、「IT・Web業界の知見が豊富なキャリアアドバイザー」にご相談ください!

IT特化の転職エージェントのGeekly(ギークリー)なら、専門職種ならではのお悩みも解決できる専任のキャリアアドバイザーがカウンセリングから入社後まで完全無料で全面サポートいたします!

転職しようか少しでも悩んでいる方は、お気軽に以下のボタンからご相談ください。

 

\ IT転職のプロが無料でサポート! /

キャリア相談をしてみる

この記事の監修者

【国家資格保有】キャリアアドバイザー 小峰涼平

5年間インフラエンジニアとして新規顧客提案や既存顧客への提案〜運用保守業務を経験。業務を行う中で人材業界へ興味を持ち、22年1月国家資格キャリアコンサルタントを取得。現在、資格を活かしキャリアアドバイザーとしてエンジニアの転職支援を行っております。

この記事が気に入ったらSNSでシェアをお願いします

あわせて読みたい関連記事

新着記事はこちら