プログラマーが良く聞くLinuxにおけるShell(シェル)とは?Shellの概要から出来る事までを紹介
はじめまして、エンジニアスタイル編集部です!
コラムページでは、ITフリーランスに向けてお役立ち情報を発信します。Twitterではホットな案件を紹介してまいりますので、ぜひフォローをお願いいたします!
本記事が、皆様の参考になれば幸いです。
経験がまだ少ない方にもわかりやすく説明するために、初歩的な内容も記載しております。記事も長いので、実務経験豊富な方は、ぜひ目次から関心のある項目を選択してください。
エンジニアスタイルは、最高単価390万円、国内最大級のITフリーランス・副業案件検索サービスです。Shellのフリーランス・副業案件一覧を以下からご覧いただけますのであわせてご確認ください。
目次
Shell(シェル)とは何か?
シェルは、Linuxのカーネルとユーザーを繋ぐインターフェースです。
カーネルの外周のポジションといえます。
ユーザーがターミナルを使ってコマンドを実行した際には、シェルがカーネルに要求を伝え、カーネルから返ってきた結果をユーザーに伝えてくれます。
シェル とは Linux などのUNIX系OSを操作するときに使用するコマンドラインインターフェース を指し、ユーザーはシェルに対してコマンドを入力することでOSを操作することができるということです。
シェルスクリプトとの関係は?
シェルスクリプトとは、シェルによって解釈・実行される一連の処理を記述したスクリプトです。
UNIXシェルで用いられるスクリプト言語を指します。
「スクリプト(script)」は「台本」という意味で、コンピュータに実行させたい処理を記述してコンピュータを動かします。
Linuxのカーネルに指示を行うインターフェース
シェルスクリプトとは、シェルによって解釈・実行される一連の処理を記述したスクリプトです。
Linuxへのログインに成功すると「シェル」が起動します。
Linuxで主に使われているシェルが、「bash(バッシュ)」と「tcsh(ティーシーシェル)」です。
シェルスクリプトを利用して、用意されているコマンドからカーネルに指示をあたえるイメージです。
シェルスクリプトは処理要求コマンドの集合体
シェルスクリプトは、シェルで解釈できるコマンドや命令を集めて作ったプログラムのことです。
OS操作の為、シェル上で実行できるプログラミング言語(スクリプト言語)の事です。
複数のOSコマンドや制御文などを組み合わせた簡易プログラムを指し、一般的にはUNIX系OS(Linuxなど)のシェルで実行できます。
シェルスクリプトで書かれる典型的な処理例はファイル操作、プログラム実行、テキスト印刷などがあり、主に定型作業の自動化によく使われ、条件命令の実行/ファイル読み込み・書き出しなど上から順にコマンドが実行される為、都度コマンドを打たずにすみます。
シェルスクリプトの種類
シェルとは、キーボードから入力されたコマンドを解釈し、実行するプログラムであり、プログラムが返す実行結果を表示するのもシェルの役割です。
つまりシェルというのは、ユーザとカーネルの間の通訳のようなものです。
シェルには、sh、bash、csh、tcsh、ksh、zshなど、さまざまな種類があり、bシェル関連とcシェル関連に分けることができます。
bシェルのshはUNIXの標準シェルともいえますが、シェルとしての基本的な機能しか持っていないため、その後、機能を拡張したkshやzshが開発されています。
LinuxやmacOSはbashがシェルの標準環境の為、利用されています。
同様にbシェルのshを元にスクリプト構文をC言語のプログラミング風にアレンジし、配列を使用可能としたcシェル関連のcshが登場し、ヒストリ編集機能やライン編集などを追加して高機能化したtcshへと派生しています。
sh:Bourne shell
Bourneシェルとは、多くのUNIX系OSで標準的に用いられるシェルプログラムの一つ。標準の実行プログラムファイル名(コマンド名)は「sh」となります。
シェルは利用者からOSへの操作の受付や、操作の実行結果の表示などを担うプログラムで、BourneシェルはUNIX Version 7を利用するためのシェルとして1977年に開発されています。
シェルスクリプトに制御構造や変数が利用できるようになり、スクリプトファイルを明示的にコンパイルせずにコマンドとして即座に実行することができます。
環境変数の利用や複数コマンドの非同期実行、組み込みコマンドの提供など、現代のシェルの多くでは定番となっている機能も組み込まれています。
直接の後継にあたるプログラム「Bourne Again shell」(コマンド名はbash)がよく知られている。
bash:Bourne-Again shell
GNUプロジェクトで使用するために作成されたBourne Shell上位互換のシェルです。
Bourne Shellの派生型としては最も有名で、多くのUNIXシステムに搭載されている。
また、Linuxでは標準のシェルとして採用されている。
Bourne Shellと互換性を保ちながら、Bourne Shellには実装されていないコマンドライン編集機能、ジョブ制御機能なども備えており、インタラクティブな操作性が非常に向上している。
また、Bourne Shellに比べてオプションや変数が数多く用意されており、柔軟なカスタマイズが可能です。関数の定義や制御構造の追加、数値演算など数多くの拡張機能が追加されており、シェル・プログラミング環境が充実しています。
Linux ディストリビューションやmacOSでデフォルトのシェルとされているのが特徴です。
csh:C shell
cshとは、UNIX系OSで標準的に用いられるシェルプログラムの一つです。
利用者からOSへの操作の受付や、操作の実行結果の表示などを担うプログラムで、cshはBSD系UNIXの一つである2BSDを利用するためのシェルとして1978年に開発されています。
対話的に利用する際に便利な機能が多数盛り込まれたのが大きな特徴で、過去に実行したコマンドの履歴(ヒストリ)の保存と素早い呼び出しや、ホームディレクトリを「~」(チルダ)で指定できる記法、コマンド入力中のファイル名の補完、利用者が任意の文字列に別名を付けて短い文字列で呼び出せるようにするエイリアス機能などが実装されています。
これらの多くはその後開発された多くのシェルにも採用されています。
ksh:Koran shell
kshとは、多くのUNIX系OSで標準的に用いられるシェルプログラムの一つです。
シェルは利用者からOSへの操作の受付や、操作の実行結果の表示などを担うプログラムで、kshは1983年、AT&T社のUNIX System Vで利用するために同社ベル研究所で開発されています。
それ以前に人気の高かったBourneシェルの上位互換となっており、同シェル向けのシェルスクリプトなどはそのまま実行できることが特徴です。
一方でこれとは別の系統のcsh(C Shell)の機能の多くを取り入れ、コマンドの履歴(ヒストリー)の呼び出しや文字列の別名(エイリアス)の設定など、対話的に操作する際に便利な機能が用意されています。
kshの仕様はUNIXの標準規格であるPOSIXの一部として取り込まれています。
AT&T社の商用UNIXの一部として開発されたためソースコードなどは長らく非公開でしたが、2000年にオープンソースソフトウェアとして公開されています。
シェルの具体的な役割と機能について
シェルは、Linuxのカーネルとユーザーを繋ぐインターフェースであり、カーネルの「殻」のポジションを担います。
ユーザーがターミナルを使ってコマンドを実行した際には、シェルがカーネルに要求を伝え、カーネルから返ってきた結果をユーザーに伝えます。
シェルスクリプトを使うと便利な場面
シェルスクリプトが必要な環境、便利に使う場面を3つ紹介します。
- ファイルの移動やログの抽出など、PC上での基本的な操作
- コマンドの利用による、複雑なタスクの効率化
- 他ツールを活用した自動化
ファイルの移動やログの抽出など、PC上での基本的な操作
ファイル移動やコピペ、ログの記録/抽出など、PCでできる基本的な操作はシェルスクリプトで実行できます。
■コマンド例
- cat:ファイルの中身を表示する
- sort:ファイルの中身を調べる
- split:ファイルを分割する
UNIX系のOSであれば、bashのシェルスクリプトが標準で入っていることがほとんどなので、LinuxやmacOS上の操作をするときに便利です。
シェルスクリプトの「パイプ」という機能をつかえば、複数の異なるコマンドを連携させることが可能です。
「grep」というコマンドは、文書内から特定の文字列が含まれる箇所をすべて抽出してくれます。このgrepコマンドが抽出した結果のうち、ラスト3つ分の結果のみを抽出したいというときはどうすればよいでしょうか。
答えは「tailコマンドと組み合わせる」です。tailコマンドは、入力された文書について、指定した行数分を末尾から読み取ってくれます。
そのため、パイプを使ってgrepコマンドとtailコマンドを組み合わせると、「文書中から特定の文字列が発見されたラスト3か所を取得する」という処理を実現できます。
このようにシェルスクリプトのパイプを利用すれば、ひとつのコマンドでは実現できない複雑なタスクをこなせるようになります。
他ツールを活用した自動化
シェルスクリプトで組み合わされるのは、コマンドだけではありません。
JavaやRuby、Goなどの言語で実装されたツールやソフトを組み合わせて、さらなる業務自動化を図ることもできます。
組み合わせるツール/ソフトに制限はありません。
Gitのような開発に欠かせないCLIツールから、Google ChromeのようなGUIアプリまで、さまざまなツールやソフトをシェルスクリプト内で連携させられます。
もちろん、自作ツールとの連携も可能です。
このように、シェルスクリプトによってさまざまなツールを組み合わせれば、さらなる業務自動化/効率化を実現できます。
シェルスクリプトの具体例
シェルスクリプトの具体例を4つ記載します。
〇参考
#!/bin/sh
echo “Hello World”
exit 0
1行目:「sh」を利用するため、shへのパスを宣言しています。
2行目:「Hello Warld」を表示することを要求しています。
3行目:シェルスクリプトの正常終了を意味しています。
〇参考2
#!/bin/sh
echo 1 + 2
= read answer
if [ $ answer = “3” ]; then
echo “OK”
fi
計算結果をreadコマンドでキーボードからの入力をシェル変数「answer」に格納しています。
その「answer」変数をif 文の条件式に当てはめ、もし入力が「3」であったら条件式が真となり、then以下の処理が実行されます。
〇参考3
#!/bin/sh
echo 1 + 2
= read answer
if [ $ answer = “3” ]; then
echo “OK”
else
echo “NG”
fi
条件式が真のときだけでなく偽であったときも真のときとは別の処理を実行させたい場合があります。そんなときはelse文を使用して、偽の場合の処理を定義します。
〇参考4
#!/bin/ sh
read a
if [ $ a = “1” ];then
echo “True”
elif [ $ a = “2” ]; then
echo “False”
else
echo “Other!”
fi
if〜then~else文では、条件式に一致する(真) か、一致しない(偽)の2 分岐のみでしたが、条件式でも3つ以上の分岐をさせたい場合があります。
そのような場合、if文を記述します。
キーボードから「1」と入力しEnterキーを押せば「True」が、「2」なら「False」、それ以外なら「Other!」がプロンプト上に出力されます。
スクリプト言語を利用する際には
スクリプト言語はプログラミング言語のうち、比較的容易に記述や実行ができるものを指します。記述が自然言語に近いため習得しやすいとも言われます。
スクリプト言語を利用する際に必要なこと以下2点を紹介します。
- 環境変数PATHを設定
- コマンドを入力する
環境変数PATHを設定
よく使うコマンドや、ツールをフォルダにまとめて管理することができます。
フォルダに保存されているコマンドを起動したい場合、「PATH」という環境変数にフォルダの場所をセットすれば、フルパス名を指定しなくても呼び出せます。
Linuxのシェルスクリプトでは、環境変数はシェルから起動されたすべてのプロセスに有効な変数です。
環境変数は、いったんシェル変数に値を代入して、exportコマンドによって設定するイメージです。
コマンドを入力する
シェルスクリプトでは、コマンドが用意されています。
ファイルの操作や、プログラム処理を実行できます。
例えば、コマンドを入力することで、ファイルのオープン、リード、クローズが実現できます。
コマンドを入力することで、PCでのファイル操作やプログラム処理、ツール起動などを実施します。
Linuxでよく利用されているのはbash
多くのLinux ディストリビューションやmacOSでbashは、デフォルトのシェルとされています。
柔軟なカスタマイズが可能となっており、関数の定義や制御構造の追加、数値演算など数多くの拡張機能が追加されており、シェル・プログラミング環境も充実しています。
まずは、シェルスクリプトを勉強する際は、bashコマンドを習得するとよいでしょう。
まとめ
シェルスクリプトの基本は実行したいコマンドをそのまま並べるイメージなので、難しいものではありません。
DB操作も可能なので、簡易的な業務プログラムを作成することもできます。
実際、バッチ 処理をシェル スクリプトで作成することもあります。
自動化ツールや各種バックアップ、サーバー起動、停止スクリプトなど、シェルスクリプトを作成する場面はとても多く、習得しておかなければならないスキルといえます。
- シェルスクリプトとは、シェルによって解釈・実行される一連の処理を記述したスクリプトです。
- シェルスクリプトは、ファイルの移動やログの抽出、PC上での基本的操作、他ツールを起動する際に便利です。
- シェルスクリプトで普及しているのは、bashです。
- CATEGORY
- 学習
- TAGS
-
-
-
-
-
-
-
【コンサル/PM】新規システム業務支援案件の 求人・案件
- 850,000 円/月〜
-
その他
- Shell PowerShell
-
【Lunix/Solaris/一部リモート】レンタリースシステム老朽更新システム移行案件の 求人・案件
- 650,000 円/月〜
-
その他
- Shell
-
【C#.NET】官公庁ワークフローシステム保守の 求人・案件
- 550,000 円/月〜
-
その他
- C#.NET Java C# SQL Shell
-
【Python(データ分析系)】Splunkを使用したログ収集及びサービス監視の 求人・案件
- 700,000 円/月〜
-
その他
- Python SQL Shell
-
【Ruby/フルリモート】スマホ開発エンジニア案件の 求人・案件
- 700,000 円/月〜
-
その他
- Ruby Python JavaScript Nodejs HTML その他 TypeScript Shell
-
【AWS】モバイル向けブラウザゲームのインフラ構築保守の 求人・案件
- 670,000 円/月〜
-
その他
- PHP Shell
-
【COBOL】マイグレーション資産解析案件の 求人・案件
- 550,000 円/月〜
-
五反田・大崎・目黒
- COBOL Shell
-
【サーバー(Linux系)】サーバエンジニア募集(初級)の 求人・案件
- 500,000 円/月〜
-
その他
- Shell PowerShell
-
【サーバー(Linux系)】金融向け不正検知サービス 運用保守の 求人・案件
- 650,000 円/月〜
-
その他
- SQL Shell
-
【サーバー(Linux系)】損保 システムリプレースの 求人・案件
- 600,000 円/月〜
-
その他
- Shell
-
【サーバー(Linux系)】官公庁向けサーバー構築PJ内での業務効率のためのマクロ担当の 求人・案件
- 500,000 円/月〜
-
新宿
- Shell VBA PowerShell その他
-
【JavaScript】物流会社向けシステム運用ツール作成業務の 求人・案件
- 650,000 円/月〜
-
その他
- JavaScript SQL Shell VBA Bash
-
【サーバー(Linux系)】AWS環境で構築された2つのシステム(Linux環境)間のデータ連携の事前検討から対応できる担当者を募集の 求人・案件
- 800,000 円/月〜
-
品川・お台場
- Shell
-
【サーバー(Linux系)】Webシステム運用・保守(アプリ)の 求人・案件
- 300,000 円/月〜
-
その他
- SQL Shell
-
【サーバー(Linux系)】官庁自動車情報の次期システム更改の 求人・案件
- 450,000 円/月〜
-
その他
- Shell PowerShell
-
【クラウドエンジニア(AWS)】金融機関向けのクラウドインフラ設計の 求人・案件
- 750,000 円/月〜
-
その他
- Shell Bash
-
【クラウドエンジニア(AWS)】【クラウドエンジニア(AWS)】【業務委託(準委任)】某流通会社システムのインフラ運用と運用改善の 求人・案件
- 850,000 円/月〜
-
その他
- Shell
-
【サーバー(Linux系)】AWS環境で構築された2つのシステム(Linux環境)間のデータ連携の事前検討から対応できる担当者を募集の 求人・案件
- 650,000 円/月〜
-
品川・お台場
- Shell
-
【リモート】技術支援事業のエンジニアの 求人・案件
- 900,000 円/月〜
-
その他
- その他
-
【フルリモート/Golang】バックエンドエンジニアの 求人・案件
- 900,000 円/月〜
-
その他
- Go言語 Swift Kotlin SQL
-
【フルリモート】大手メガベンチャーのテックリード(フルスタックエンジニア)募集の 求人・案件
- 1,500,000 円/月〜
-
その他
- Go言語 SQL JavaScript
-
共済システム刷新PJのPM補佐支援のエンジニア求人・案件の 求人・案件
- 1,200,000 円/月〜
-
新宿
-
顧客料金システム更改PJのITインフラアーキテクト支援/電力業のエンジニア求人・案件の 求人・案件
- 2,000,000 円/月〜
-
その他
-
【Java】メール配信システム開発支援(ベンダー側SE)のエンジニア求人・案件の 求人・案件
- 750,000 円/月〜
-
渋谷
- Java
-
【Java】システム保守開発案件の 求人・案件
- 730,000 円/月〜
-
その他
- Java JavaScript
-
【Python】自動仕訳エンジン製品PostgreSQL対応案件の 求人・案件
- 850,000 円/月〜
-
その他
- Python SQL Go言語
-
【セキュリティ】セキュリティ運用支援案件の 求人・案件
- 550,000 円/月〜
-
その他
-
【Python】論文投稿状況管理システム開発案件の 求人・案件
- 850,000 円/月〜
-
渋谷
- Python
-
【Java/一部リモート】小売業向け基幹システムコンバージョン支援案件の 求人・案件
- 550,000 円/月〜
-
その他
- Java SQL
-
【UI/UXデザイン】サービス制作案件の 求人・案件
- 650,000 円/月〜
-
その他
-
【リモート/TypeScript/Python/Flutter/Vue.js/Node.js/GCP/AWS】技術本部/R&D部Head of AIの 求人・案件
- 1,000,000 円/月〜
-
その他
- Python JavaScript TypeScript Nodejs SQL
-
【DBエンジニア(SQL全般)】システム基盤の保守・管理・運用委託(サーバエンジニア)の 求人・案件
- 900,000 円/月〜
-
品川・お台場
- SQL
-
【Ruby/Python/Node.js】自動車部品メーカー向けアプリケーション開発案件の 求人・案件
- 800,000 円/月〜
-
秋葉原・神田
- Python Ruby JavaScript Nodejs
-
【C++】産業系プラットフォーム機能拡張開発案件の 求人・案件
- 620,000 円/月〜
-
その他
- C++ C# JavaScript
-
【Swift】美容医療プラットフォーム向け開発案件の 求人・案件
- 1,050,000 円/月〜
-
恵比寿・代官山
- Swift
-
【PM】不動産管理システムマイクロサービス基盤開発案件の 求人・案件
- 900,000 円/月〜
-
その他