shellとは
shellとは、ユーザーとコンピューターをつなぐ仲介役を担う重要なプログラムの一種です。コンピューターを操作するにあたって、OSはさまざまな指令を出す基本のソフトウェアです。shellは、ユーザーが望む動作を受けて、その指示をOSに伝達した上で、コンピューターの動作に繋げます。
shellの特徴
shellの特徴は、カーネルリクエストを簡単に行える点です。カーネルとは、PCの処理を切り替えるソフトウェアを指します。従来のプログラミングでは、システムアクセス用のプログラムコードを作成する必要がありましたが、shellでは追加の開発なしに、コマンドラインで必要な操作ができます。
また、シェルスクリプトというスクリプト言語に対応していることも特徴の1つです。shellは、作業の操作をコマンドラインに記述して実行します。シェルスクリプトでは、同じ処理をコードとして作成することによって、バッチ処理や一括実行を簡単に行えます。
shellを利用すれば、複数の作業手順を一括実行でき、作業品質の均一化が可能です。シェルスクリプト実行により、システムの運用管理の自動化も期待できます。
shellの役割
shellは、ユーザーとカーネルの仲介役です。ユーザーが入力したコマンドを解釈してカーネルに処理を依頼し、その結果やメッセージなどを画面に表示します。ユーザーはコマンドプロンプトで操作したいコマンドを入力し、表示される結果を見て次のコマンド入力を行うというサイクルで、対話的な作業を行います。UNIXやLinuxの中核にあるカーネルが管理している機能を用いて、ユーザーはさまざまな操作を実行しますが、カーネル自身はユーザーと対話する
能力を持っていません。そこで仲介役となるのがshellです。shellはユーザーと対話する能力を持ち、カーネルに対して操作を指示します。ユーザーからみると、カーネルの周りを覆っている殻(shell)のように見えることから、シェルと呼ばれています。
shellとシェルスクリプトの違い
shellとシェルスクリプトは混同しやすい用語ですが、明確な違いがあります。shellは、カーネルに処理を伝達する仲介役のプログラムです。ユーザーの指令はshellを介して各ソフトウェアに伝達されます。一方でシェルスクリプトは、shellがカーネルに伝える指令をまとめたスクリプトファイルのことです。
また、shell上で実行できるスクリプト言語のことを指す場合もあります。
shellは、シェルスクリプトに書かれているプログラムの上から下へ順番に処理していくため、サーバー管理のような単純な作業をまとめておくことで自動化できます。
shellの種類
shellの種類について解説します。
bash
bashとは「Bourne Again shell」の略で、Unix系のシステムで用いられるshellのことです。Unix系でもLinuxだけではなく、MacやWindowsにも幅広く普及しています。bashはLinuxで標準採用されており、拡張子は「.sh」です。プログラミング同様に、変数や関数、演算処理など多くの機能があり、簡単なプログラムのみであればbashだけで記述できます。
bashの大きな特徴は、対応しているOSが多いことです。OSによって、操作上の細かな注意点はありますが、基本的な操作は変わりません。
また、bashはコンパイルが不要という特徴もあります。bashのコマンドを記述する際にはテキストエディタを使用するため、コンパイルをしなくてもスクリプトの作成が可能です。
tcsh
tcshは、C言語に近い文法体系を持つCシェルの派生型です。Cシェルとは、Bourne shellが必要最低限の機能しか持たないことを踏まえて、ユーザーにとってより簡単に使用でき、理解しやすいshellを提供したいという思いで設計されました。tcshは、そのCシェルが派生したshellの1つです。
tschは、Cシェルのなかでも特にユーザーインターフェイスの部分を中心に拡張されたshellです。ビデオ端末上での使用を前提とした使いやすいコマンドライン編集機能や、強力なヒストリ編集機能が追加されています。
bashと同様に、スクリプトにも対応しており、組み込み関数はC言語に似た様式を使用可能です。そのため、C言語を習得している人にとっては比較的導入しやすいでしょう。
zsh
数あるshellのなかでも、万能と言われているのがzshです。ゼットシェルやジーシェル、ゼッシュなどと呼ばれます。shをベースとして、ksh、csh、bashの優れた機能取り込み、作業効率を高める独自の機能を搭載していることが特徴です。またzshは、MacOSのCatalinaから標準シェルとして採用されています。
zshの主な機能は以下のとおりです。
-
・コマンドライン編集機能・グロビング機能
・パス展開機能
上記以外にも多くの機能が搭載されています。
シェルスクリプトの使用例やできること
シェルスクリプトの使用例やできることについて解説します。
定例作業の自動化
cronと組み合わせると、時間・日・月・曜日単位で自動的に実行するプログラムを設定できます。例えば、「毎月1日に実行したい」「毎日18時に実行したい」といった繰り返しの定例作業を自動化できます。cronとは、Unix系OSでスケジュールに従ってプログラムを自動実行するためのプログラムです。
また、組み合わせることができるツールやソフトに制限はありません。Google ChromeのようなGUIアプリや、Gitのような開発に欠かせないCLIツールなど、さまざまなツールやソフトをシェルスクリプト内で連携できます。さらに、自作ツールとの連携も可能です。
データ抽出作業
UnixやLinuxを操作する上では、ログファイルやデータの出力結果から必要な情報を抜き出すデータ抽出作業が多く発生します。その際、特定の文字を含む情報を出力するgrepコマンドを利用できますが、複雑な処理を実現するためには何度も入力しなければなりません。大量に記述されているログファイルの中から前日の情報かつ◯◯が含まれる情報を抽出したい場合、パイプなどでコマンドをつなぐ方法もありますが、シェルスクリプトに記載しておけば、一回の実行でデータ抽出を実施できます。
業務効率化
シェルスクリプトは、OS操作のコマンドだけではなく、ソフトウェアの起動や停止、再起動などでも利用されます。シェルスクリプトではコマンド以外に、JavaやRubyなどの言語で実装されたツールやソフトも組み合せることが可能です。また、シェルスクリプトのパイプ機能を利用すれば、複数のコマンドを連携できます。例えばgrepは、テキスト文書の中から特定の文字列が含まれている箇所をすべて抽出してくれるコマンドです。抽出した上で、最後の3つの結果だけを抽出したい場合に、grepコマンドとtailコマンドをパイプで繋げて記述します。
tailコマンドは、入力されたテキスト文書について、指定した行数分を末尾から読み取る機能を持ちます。両者を組み合わせることで、想定通りの結果を取得できます。このように、異なるコマンドを連携させてうまく使えば、業務の効率化に繋がるでしょう。
shellを扱うエンジニアの年収
shellエンジニアとは、主にCUIベースでshellやシェルスクリプトを扱うエンジニアを指します。レバテックキャリアに掲載されているshell案件の平均年収は、640万円です。(※2023年4月時点)shellを扱う案件としては、シェルスクリプトを使用したバッチ処理の開発やスクリプト、ツールの作成案件などが挙げられます。
金融系、官公庁、通信系など、幅広い業界のクライアントが存在します。多くの場合、インフラ系の案件では、OSやクラウド、ネットワーク、仮想マシンなどの知識や実務経験が必要です。
3年以上の実務経験がある場合や、インフラの上流工程経験がある場合は、高い年収が期待できるでしょう。
関連記事:shellを活かせる仕事|求人案件の紹介から年収相場まで
shellの利用方法
shellの利用方法について解説します。
shellの操作方法
shellは、対話形式によるコマンドの実行や、シェルスクリプトファイルを読み込んで実行します。リダイレクト機能を用いれば、入出力先を変更できます。利用するシステムのログインシェルにBashが設定されている場合には、そのままBashのコマンド入力が可能です。シェルスクリプトの1行目のコメント行に実行プログラム名を”#!/bin/bash”のように指定すれば、明示的にBashを利用できるようになります。
shellのコマンド
shellで使用するコマンドは、オプションを付与することでより詳細な指示を出せます。以下は、よく使うコマンドとオプションの一覧です。
コマンド | 説明 | オプション |
---|---|---|
ls | ディレクトリ情報を一覧表示する | -a: 全て表示 -l: ファイル詳細表示 1: リストを縦にソート -r: 逆順に表示 -t: 更新時間順にソート -m: ファイル名をカンマ区切り表示 -h: 単位を読みやすい形式で表示 -k: キロバイト単位の表示 -i: ファイル名の左にi-node番号を表示 -S: ファイルサイズ順にソート -X: ファイルを拡張仕事に集約 -R: ディレクトリ内容を再起的に表示 -F: 情報の付加 --full-time: タイムスタンプ詳細を表示 --help: ヘルプ表示 |
pwd | 現在アクセスしているディレクトリ表示 | -L: 論理的なディレクトリ名を表示 -P: 物理的なディレクトリ名を表示 |
cd | ディレクトリ移動 | -L: 論理的なディレクトリへ移動 -P: 移動さきがシンボリックリンクの場合、物理的なディレクトリへ移動 |
mkdir | フォルダ作成 | -m: 作成するディレクトリのパーミッションを設定 -p: 必要に応じて親ディレクトリを作成 -v: 経過表示 |
cp | ファイルのコピー | -i:上書前に確認 -v:実行内容の表示 -n:存在するファイルの上書き制御 -f:強制的に上書き -b:上書きファイルのバックアップ生成 -S 接尾辞:バックアップファイル生成時、ファイル名末尾に付ける文字 |
mv | ファイル削除 | -f:存在しないファイルを無視 -i: 削除前に確認 -v:経過を表示 -d:unlinkでディレクトリを削除 -r:ディレクトリを再帰的に削除 |
シェルスクリプトの作成
スクリプトファイルはテキスト形式のため、emacsやviなどのテキストエディタを用いて作成します。シェルスクリプトでは、環境変数に応じた処理の追加や、コマンド解釈で必要とされる引用ルールに応じた文字列を引数として渡すことができます。シェル組み込みコマンドや外部コマンドを組み合わせて、より大規模な処理の登録が可能です。
シェルスクリプトの実行
シェルスクリプトは、以下のようにコマンドを入力すれば実行できます。
bash ファイル名
ただし、実務でシェルスクリプトを実行する場合は、そのファイルに実行の権限があるかどうかを事前に確認するケースが多いでしょう。以下では、権限の確認から実行までの方法を解説します。
まず、あらかじめ作成されているシェルスクリプトの権限を確認します。
ls -la ファイル名
上記コマンドを実行すると、対象ファイルに付与されている権限が以下のような形で表示されます。
//出力
rwxr-xr-x
「r」は読み出し許可、「w」は書き込み許可、「x」は実行許可、「-」は対象の権限が与えられていないことを示します。上記の出力結果では、「rwx」で所有者にすべての権限が許可されていること、真ん中の「r-x」はグループに対する読み出しと実行の権限、「r-x」は他のユーザーに読み出しと実行の権限が与えられていることを表しています。
権限を与えるためには、次のようなコマンドで設定が可能です。
chmod 755 ファイル名
最初の「7」がユーザーの権限、中央と最後の「5」がグループと他のユーザーの権限を指定する値です。設定する値は、以下のような意味を持ち、それぞれ加算した値を入力します。
4 | 読み出し許可 |
2 | 書き込み許可 |
1 | 実行許可 |
0 | 許可なし |
最後に、以下のコマンドを入力すれば、シェルスクリプトを実行できます。
bash ファイル名
シェルスクリプトの基本文法
シェルスクリプトで使用する基本的な文法について解説します。
変数への代入と参照
変数へ値を代入する場合は、変数名と値を「=」で繋ぐことで代入されます。文字列を代入する場合は、シングルクオーテーションかダブルクオーテーションで囲みます。ここでの注意点は、「=」の前後に空白を含めずに連続して記載することです。
//変数へ代入
str=’hello’ # 文字列を代入
num=1 # 数値を代入
//変数を参照
echo $str # 「1」が出力される
echo $num #「hello」が出力される
配列定義
配列は複数の要素を1つの変数に格納できます。配列は「()」で囲むことによって定義できます。
//配列定義
//配列定義
list=(val1 val2 val3)
//配列表示
echo ${list[@]} # 配列の中の全ての値を表示
echo ${list[0]} # 配列の中の0番目(val1)を表示
echo ${!list[@]} # インデックスを表示
echo ${#list[@]} # 配列の要素数を表示
//配列に要素を追加
list [3]=val4 # 配列の4番目に要素を追加
//配列から要素を削除
unset list[2] # 配列の3番目を削除
条件分岐:if文
条件に該当するか否かで処理を分岐する構文です。
注意点として、条件文で比較を行う場合は、演算子の前後にスペースを入れてください。
if [条件文]; then
処理
elif [条件文]; then
処理
else
処理
fi
条件分岐:case文
case文は、パターンを複数列挙して、該当した処理を実行します。
case $var in
パターン )
処理;;
パターン )
処理;;
esac
関数
関数を定義する方法と呼び出す方法です。
function 関数名(){
処理
}
//関数呼び出し
関数名 ‘引数’
ITエンジニアの転職ならレバテックキャリア
レバテックキャリアはIT・Web業界のエンジニア職を専門とする転職エージェントです。最新の技術情報や業界動向に精通しており、現状は転職のご意思がない場合でも、ご相談いただければ客観的な市場価値や市場動向をお伝えし、あなたの「選択肢」を広げるお手伝いをいたします。
「将来に向けた漠然とした不安がある」「特定のエンジニア職に興味がある」など、ご自身のキャリアに何らかの悩みを抱えている方は、ぜひ無料のオンライン個別相談会にお申し込みください。業界知識が豊富なキャリアアドバイザーが、一対一でさまざまなご質問に対応させていただきます。
「個別相談会」に申し込む
転職支援サービスに申し込む
※転職活動を強制することはございません。
レバテックキャリアのサービスについて