本記事では、UnixやLinuxを効率よく運用するために欠かせないシェルの機能や種類およびシェルスクリプトの実行方法について解説します。
シェルおよびシェルスクリプトを使いこなせることができれば、サーバーの運用が非常に楽になります。
これからUnix/Linuxサーバーの管理やサーバーエンジニアを目指す人は、本記事を参考に、シェルをマスターすることから始めてみてください。
Unix/LinuxをVPSで利用するなら
ミライサーバー
\2週間無料・全プランSSD搭載/
ミライサーバーを無料で試す
目次
シェルとは
シェルとは何か
シェル(Shell)とは、Linuxを操作するためのインターフェースです。
入力されたコマンドはシェルを介してLinuxカーネルに送信され、実行されます。
そのコマンドを一塊にしたものがシェルスクリプトで、複数のコマンドを一度に実行するためのスクリプト言語です。
このため、UnixやLinuxを効率よく運用するためには、シェルおよびシェルスクリプトの理解が欠かせません。
コマンドを入力する環境として「シェル」のほかにも「ターミナル」や「コンソール」などの似たような言葉があります。
その詳細については以下の記事で詳しく解説しています。
2023.03.02
Linuxのターミナルとは。シェルやコンソールとの違いも解説
Linuxにおける「ターミナル」とは、GUI上でコマンドを入力するためのアプリケーションのことです。コマンドを入力する環境として「コ...
シェルの機能
シェルは、コマンドを実行する以外にも便利な機能が多数実装されています。
その一部を紹介します。
- 「|」(パイプ)
パイプは、コマンドをつなげる役割をもちます。
例えば、カレントディレクトリにある多数のファイルから「log」という文字列がついたファイルを見つけたい場合は、以下のコマンドを実行します。
ls | grep log
このコマンドは、「ls」によってカレントディレクトリにあるファイルのリストをだし、その結果を「grep」コマンドに渡し、grepコマンドで”log”の文字列がついたファイル名を検索しています。
このように、パイプでコマンドの結果を次のコマンドにつなげることで、より複雑な処理を行うことができます。
- 「>」(リダイレクト)
リダイレクトは、コマンドの実行結果の出力先を変更します。
デフォルトは標準出力であるディスプレイです。
例えば、「ls」コマンドの結果を「test.txt」ファイルに出力したい場合は、以下のように実行します。
ls > test.txt
このとき、「>」が1つの場合はファイルを上書きし、「>>」と2つの場合はファイルを追記します。
2023.01.05
リダイレクトとは?Linuxのリダイレクトを使いこなそう
Linuxでは、コマンドを実行する際に標準入力、標準出力、標準エラー出力を使います。これらを切り替えることにより、コマンドの実行結果...
- 入力補助機能
Linuxでは非常に多くのコマンドが実行できますが、全てを覚えるのは困難です。
コマンドやファイル名を途中まで入力した後に「Tab」キーを押すと、コマンドやファイル名の候補が表示されます。
例えば、「sh」の後に続くコマンドを調べたい場合は、以下のように入力します。
sh ※ここでtabキーを押す
以下では、参考までにUbuntu(22.04.2 LTS)で実行した結果です。
これら以外にも、シェルには多数の機能があり、Linuxの操作を助けてくれます。
よく使う機能は覚えておくとよいでしょう。
シェルの種類
シェルには、多数の種類があります。
ここでは、その一部のシェルと、その特徴を紹介します。
シェルが異なると、使用できるコマンドやスクリプトの書き方が変わるため、注意しましょう。
シェル | 概要・特徴 |
---|---|
Bourne Shell(sh) | 一般的にシェルと言うとBourne Shellを指す。 最も古いシェル。 |
Bourne again Shell(bash) | shを基に機能拡張したシェル。 Redhat系Linuxの標準シェル。 |
Korn Shell(ksh) | shの上位互換。 IBM社のUnix「AIX」の標準シェル。 |
C Shell(csh) | shを基にスクリプトの構文をC言語のようにアレンジされたシェル。 配列が使用可能。 |
TENEX C Shell(tcsh) | cshを基に、インターフェース部分が拡張されたシェル。 FreeBSD(Ver4以降)の標準シェル。 |
シェルスクリプトの活用
シェルスクリプトとは
シェルスクリプトとは、複数のコマンドをまとめたスクリプトファイルであり、LinuxやUnixシステムで自動化やバッチ処理を行うために使用されます。
シェルスクリプトはテキストファイルであり、シェルが解釈して実行します。
コマンドに加え条件分岐やループなどの処理を組み合わせることで、複雑な処理を自動化できます。
シェルスクリプトの実行方法
今回では例として「Bourne Shell」を使ったシェルスクリプトを作成します。
新規にファイルを作成し、最初に以下のように記述します。
この記述は「必ず1行目に記載する」必要があるので、覚えておきましょう。
#!/bin/sh
なお、他のシェルを使用する場合は「#!/bin/bash」や「#!/bin/ksh」などのように宣言します。
そのあとは、コマンドを記載していくだけで、シェルが解釈・実行します。
ためしに、簡単なシェルを実行してみましょう。
「test.sh」という名前のファイルに、以下のように入力して保存します。
#!/bin.sh
echo Hello World!
実行し、「Hello World!」と出力されたら、成功です。
$ sh test.sh
ちなみに、前述のとおりシェルスクリプトはコマンドの羅列なので、スクリプトでなくとも同じ結果が得られます。
スクリプトだと、ファイルに多くの処理を記載することにより、スクリプトを実行すれば記載された内容を1度に実行することができるのです。
if文による条件分岐の方法
シェルスクリプトでは、状況によって処理を分岐させることができます。
ここでは、if文について解説します。
if文の書式は、以下のとおりです。
if [条件式]; then
処理
fi
上記の書式では、条件式に合致した場合のみ処理が実行されます。
条件式に合致しない場合、別の処理を実行したい場合は、以下のように記載します。
if [条件式]; then
処理1
else
処理2
fi
上記の書式では、条件式に合致した場合は処理1、合致しない場合は処理2が実行されます。
それでは、これを例に簡単なスクリプトを作ってみましょう。
#!/bin.sh NUM_A=10 NUM_B=20
if [ $NUM_A -gt $NUM_B ]; then echo ‘NUM_A > NUM_B’ else echo ‘NUM_A < NUM_B’ fi |
上記は数値「NUM_A」に10、「NUM_B」に20を代入し、それぞれの値を比較しています。
NUM_Bの方が大きいので、スクリプトを実行すると「NUM_A < NUM_B」と出力されます。
if文の条件式には、さまざまな条件を指定して処理を分岐させることができます。
以下は、if文の条件式で使用できる演算子ですので、覚えておくとよいでしょう。
演算子 | 説明 |
---|---|
数値A -eq 数値B | 数値A=数値B の場合True |
数値A -ne 数値B | 数値A≠数値B の場合True |
数値A -ge 数値B | 数値A≧数値B の場合True |
数値A -gt 数値B | 数値A>数値B の場合True |
数値A -le 数値B | 数値A≦数値B の場合True |
数値A -lt 数値B | 数値A<数値B の場合True |
-n 文字列 | 文字列の長さが1以上ならTrue |
-z 文字列 | 文字列の長さが0ならTrue |
文字列A = 文字列B | 文字列Aと文字列Bが同じならTrue |
文字列A != 文字列B | 文字列Aと文字列Bが異なるならTrue |
-d ディレクトリ名 | ディレクトリならTrue |
-f ファイル名 | ファイルならTrue |
-e ファイル名 | ファイルが存在したらTrue |
-s ファイル名 | ファイルサイズが0でなければTrue |
for文/while文によるループ処理の方法
同じ処理を何度も繰り返す場合は、ループ処理を行うと便利です。
例えば、1から10までの数字を出力したい場合、「echo 1」「echo 2」…とコマンドを10回実行するのではなく、ループ文を使用すれば簡単に記載できます。
ある程度繰り返し回数が決まっている場合に便利です。
- for文
for文の書式は、以下のとおりです。
for 変数名 in 変数に代入する値のリスト
do
処理
done
先ほどのように、1〜10まで処理を繰り返したい場合、for文を使用するとスクリプトは以下のようになります。
#!/bin.sh
for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
done
同じくループ処理を実行できるコマンドとして、while文があります。
こちらは、if文と同様条件式を記載し、条件を満たすまで処理を繰り返します。
- while文
while文の書式は以下のとおりです。
while 条件式
do
処理
done
先ほどのfor文のスクリプト例を、while文で変換すると以下のようになります。
#!/bin.sh
i=1
while [ $i -le 10 ];
do
echo $i
i=`expr $i + 1`
done
条件式では「変数iが10以下の場合に処理を実行」とし、処理内で変数の値を「プラス1」しています。
その結果、10を超えるとループを抜け、処理が終了しています。
ここまででシェルスクリプトの簡単な作成方法をご紹介してきました。
シェルスクリプトは非常に奥が深く、それだけで1冊の書籍ができるほどです。
シェルスクリプトを使えるようになれば、それまで1つ1つコマンドを入力して実行してきた作業を高速かつ自動で実行することができます。
Linuxを扱うには欠かせないスキルですので、ぜひマスターしましょう。
まとめ
本記事ではシェルおよびシェルスクリプトについて紹介しました。
シェルはLinuxカーネルとユーザーをつなぐ橋渡し的な役割をもつソフトウェアです。
シェルおよびシェルスクリプトを使いこなせることができれば、サーバーの運用が非常に楽になります。
これからUnix/Linuxサーバーの管理や、サーバーエンジニアを目指す人は、シェルをマスターすることから始めてみるとよいでしょう。
UnixやLinuxのVPSならミライサーバー
ミライサーバーは、アシストアップ株式会社が提供している、Unix系サーバーに特化したホスティングサービスです。
ミライサーバーのVPSでは、高速処理が可能なSSDを全プランに搭載しています。
OSは、UbuntuやDebian、AlmaLinuxなどの豊富なラインアップから選択することができます。
2週間無料トライアルを実施しておりますので、まずはお気軽にお試しください。