プログラマーが良く聞く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
-
【OracleDB/ShellScript】会計システムの移行業務支援|小売業|フルリモートのエンジニア求人・案件の 求人・案件
- 800,000 円/月〜
-
その他
- Shell Java SQL
-
【DBエンジニア(SQL全般)】某銀行様向けダイレクトバンキング更改案件の 求人・案件
- 800,000 円/月〜
-
その他
- SQL Shell
-
【サーバー(Linux系)】損保 システムリプレースの 求人・案件
- 600,000 円/月〜
-
その他
- Shell
-
【Java】官公庁向けシステム開発案件の 求人・案件
- 730,000 円/月〜
-
その他
- Java SQL Shell VBA
-
【Python】AI分析予測ツールのSRE開発の 求人・案件
- 1,500,000 円/月〜
-
その他
- Python Java Shell Go言語 JavaScript
-
【Python】AI分析予測ツールのSRE開発の 求人・案件
- 1,500,000 円/月〜
-
その他
- Python Java Shell
-
【Java/Linux】連携システム開発案件の 求人・案件
- 650,000 円/月〜
-
その他
- Java SQL Shell
-
【インフラ】クラウドサービスの管理サーバ更改(週5日稼働可能な方のみ限定)の 求人・案件
- 650,000 円/月〜
-
その他
- Shell Bash PowerShell
-
【Java(Spring Boot)】Python・データ分析エンジニア募集の 求人・案件
- 700,000 円/月〜
-
その他
- Java Python SQL Shell
-
【SAP/PowerShell】現行システム再構築案件の 求人・案件
- 350,000 円/月〜
-
その他
- Shell PowerShell
-
【Java(Spring Boot)】【業務委託(準委任)】ガスメーカーFWの改修・テストの 求人・案件
- 要相談
-
新宿
- Java SQL HTML JavaScript その他 Shell
-
【UNIX/一部リモート】AIX系案件の 求人・案件
- 650,000 円/月〜
-
その他
- Shell
-
【Java(Spring Boot)】【業務委託(準委任)】ガスメーカーFWの改修・テストの 求人・案件
- 要相談
-
新宿
- Java SQL HTML JavaScript その他 Shell
-
【DBエンジニア(SQL全般)】リース企業基幹システムエンハンスOracle(PL/SQL)エンジニア募集の 求人・案件
- 700,000 円/月〜
-
その他
- SQL Java Shell
-
【DBエンジニア(SQL全般)】食品系事業会社の基幹システム移行プロジェクトの 求人・案件
- 1,000,000 円/月〜
-
その他
- SQL COBOL Shell
-
検証用ツール作成支援の 求人・案件
- 要相談
-
その他
- Java Shell VBA PowerShell
-
大手通信業者向け決済システムのエンハンス開発(PMO)の 求人・案件
- 要相談
-
その他
- Java SQL Shell
-
クレジットカード会社-ユーザー部署の業務用ツール作成の 求人・案件
- 要相談
-
その他
- Java Shell VBA PowerShell
-
【C言語/C++(Web開発)】印刷ワークフロー管理システムの開発の 求人・案件
- 650,000 円/月〜
-
その他
- C++ C言語 VC VC++ SQL
-
【C#3年以上/フルリモート可能/週5稼働/20~40代活躍中】海外拠点向け自動車部品製造における開発支援の案件・求人の 求人・案件
- 750,000 円/月〜
-
その他
- C#
-
【VB.NET】電力グループ会社向けシステム維持保守案件の 求人・案件
- 520,000 円/月〜
-
その他
- VB.NET
-
【Java/フルリモート】自動車会社向けシステム開発案件の 求人・案件
- 600,000 円/月〜
-
その他
- Java
-
【SAP/PMO】メーカー向けSAP導入プロジェクト案件の 求人・案件
- 900,000 円/月〜
-
その他
-
【コンシューマー向け3Dアクションゲーム】運営プランニング案件の 求人・案件
- 要相談
-
その他
-
【C言語】配電自動化システム改修案件案件の 求人・案件
- 550,000 円/月〜
-
その他
- C言語
-
【フルリモート】動画配信サービスの運用保守_バックエンドエンジニアの 求人・案件
- 800,000 円/月〜
-
その他
- PHP SQL その他
-
【C言語/C++(Web開発)】ファンタジー系アプリの新規開発案件の 求人・案件
- 800,000 円/月〜
-
大阪府
- C++ C言語
-
【TypeScript】炎上検知システムの開発案件(フルスタックエンジニア)の 求人・案件
- 850,000 円/月〜
-
その他
- TypeScript JavaScript
-
【TypeScript】新規Webアプリケーションにおけるフロントエンド開発の 求人・案件
- 850,000 円/月〜
-
その他
- TypeScript JavaScript
-
【TypeScript】業務系WEBシステムの開発案件の 求人・案件
- 700,000 円/月〜
-
その他
- TypeScript Java SQL
-
【JavaScript(React)】PM /開発案件の 求人・案件
- 750,000 円/月〜
-
その他
- JavaScript
-
【JavaScript(React)】某不動産会社 チケット予約システム開発(TypeScript/Next)の 求人・案件
- 700,000 円/月〜
-
その他
- JavaScript TypeScript
-
【PM】社内システム向けアプリバージョンアップ支援案件の 求人・案件
- 700,000 円/月〜
-
その他
-
【コンサル】船会社向け業務高度化支援案件の 求人・案件
- 1,250,000 円/月〜
-
その他
-
【Java/C#】調達システム老朽化更新案件の 求人・案件
- 600,000 円/月〜
-
その他
- Java C# SQL HTML JavaScript
-
【PMO/上流】Sler向け生成AI支援案件の 求人・案件
- 850,000 円/月〜
-
その他