初心者向けシェルスクリプト入門 – LinuxでBashスクリプトを作成・実行する方法を徹底解説
シェルスクリプトは、Linuxにおける処理の自動化に欠かせない重要な技術です。スクリプトを使えば、一連のコマンドをファイルに記述し、まとめて実行できるようになります。
同じコマンドを何度も入力する手間が省けるため、作業時間を大幅に節約できます。日々のタスクを効率的にこなすだけでなく、自動実行のスケジュールを組むことも可能です。
さらに、新しいセッション起動時に特定のメッセージを表示したり、環境変数を設定したりするなど、システム起動時に実行されるスクリプトを設定することもできます。
シェルスクリプトの活用範囲は非常に広いため、さっそく学んでいきましょう。
この記事では、以下の内容を解説します。
- Bashシェルとは何か
- Bashスクリプトとは何か、その見分け方
- 最初のBashスクリプトの作成と実行方法
- シェルスクリプティングの基本構文
- システムに登録されたスケジュール済みスクリプトの確認方法
- cronジョブによるスクリプトの自動化方法
学ぶ最良の方法は実際に手を動かすことです。Replitなどを利用すれば、数分でLinuxシェル環境にアクセスできるので、ぜひ記事を読みながら試してみてください。
Bashシェルとは
Linuxのコマンドラインは、「シェル」と呼ばれるプログラムによって提供されます。長年の間に、シェルプログラムはさまざまな選択肢に対応できるよう進化してきました。
ユーザーごとに異なるシェルを使用するよう設定できますが、多くのユーザーはデフォルトのシェルを使い続けています。多くのLinuxディストリビューションのデフォルトシェルは、GNU Bourne-Again Shell(bash)です。Bashは、Bourneシェル(sh)の後継にあたります。
シェルを最初に起動すると、.bashrcまたは.bash_profileというスタートアップスクリプトが読み込まれ、これによりシェルの動作をカスタマイズできます。
シェルを対話的に使用しているとき、ユーザーからのコマンド入力待ち状態では$が表示されます。これを「シェルプロンプト」と呼びます。
[username@host ~]$シェルがroot権限で実行されている場合、プロンプトは#に変わります。スーパーユーザーのシェルプロンプトは次のように表示されます。
[root@host ~]#Bashは非常に強力なツールで、GUIでは効率的に実現が難しい操作を簡単に行えます。ほとんどのサーバーにはGUIが搭載されていないため、コマンドラインインターフェース(CLI)の使い方を習得しておくことが重要です。
Bashスクリプトとは
Bashスクリプトとは、ファイルに記述された一連のコマンドのことです。bashプログラムがこのファイルを読み込み、1行ずつ順番に実行していきます。
たとえば、コマンドラインを使って特定のパスへ移動し、フォルダを作成して、その中でプロセスを起動するといった操作が可能です。
同じ一連の手順を、コマンドをBashスクリプトとして保存して実行することでも再現できます。スクリプトは何度でも繰り返し実行可能です。
Bashスクリプトの見分け方
拡張子は.sh
命名規則により、Bashスクリプトは.shという拡張子で終わります。ただし、.sh拡張子がなくてもBashスクリプトは問題なく動作します。
スクリプトはshebang(シバン)で始まる
スクリプトはshebang(シバン)によっても識別されます。Shebangは#(シャープ)と!(バン)を組み合わせたもので、その後にbashシェルのパスが続きます。これはスクリプトの1行目に記述され、シェルに対して「このスクリプトをbashシェル経由で実行せよ」と指示します。要するに、Shebangとはbashインタープリターへの絶対パスです。
Shebangの記述例は以下の通りです。
#! /bin/bashbashプログラムのパスは環境によって異なる場合があります。確認方法は後述します。
実行権限
スクリプトには、実行するユーザーに対する実行権限が必要です。
実行権限はxで表されます。以下の例では、ユーザーはtest_script.shファイルに対してrwx(読み取り・書き込み・実行)の権限を持っています。

ファイルの色
実行可能なスクリプトは、他のファイルやフォルダとは異なる色で表示されます。
筆者の環境では、実行権限を持つスクリプトは緑色で表示されます。

最初のBashスクリプトを作成する
ここでは、Hello Worldと出力するシンプルなBashスクリプトを作成してみましょう。
hello_world.sh というファイルを作成する
touch hello_world.shbashシェルへのパスを調べる
which bash
筆者の環境ではパスは/usr/bin/bashなので、これをShebangに記載します。
コマンドを記述する
コンソールに"Hello World"を出力するため、echoコマンドを使用します。
スクリプトは次のようになります。
#! /bin/bash
echo "Hello World"お好みのテキストエディタでhello_world.shファイルを編集し、上記の行を追加してください。
ユーザーに実行権限を付与する
以下のコマンドでファイルの権限を変更し、スクリプトの実行を許可します。
chmod u+x hello_world.shchmodは、特定のユーザーに対するファイルの既存権限を変更するコマンドです。ここでは、ユーザー(u)に実行権限(+x)を追加しています。
スクリプトを実行する
スクリプトは以下のいずれかの方法で実行できます。
./hello_world.shbash hello_world.sh実行結果:

Bashスクリプティングの基本構文
他のプログラミング言語と同様に、Bashスクリプティングにも、コンピューターが理解できるプログラムを作成するための一連のルールがあります。このセクションでは、Bashスクリプティングの構文について学びます。
変数の定義方法
variable_name=valueという構文で変数を定義できます。変数の値を取得するには、変数名の前に$を付けます。
#!/bin/bash
# A simple variable example
greeting=Hello
name=Tux
echo $greeting $name
ちなみにTuxは、Linuxのマスコットであるペンギンの名前でもあります。

算術式
Bashが数値計算のためにサポートしている演算子は以下の通りです。
| 演算子 | 用途 |
|---|---|
| + | 加算 |
| - | 減算 |
| * | 乗算 |
| / | 除算 |
| ** | べき乗 |
| % | 剰余 |
いくつか例を実行してみましょう。

数値式は、以下の構文を使って計算結果を変数に格納することもできます。
var=$((expression))例を試してみましょう。
#!/bin/bash
var=$((3+9))
echo $var
上記の方法では小数は正しく計算されず、切り捨てられてしまう点に注意してください。
小数計算を行うには、bcコマンドを使用して、出力を指定した桁数まで求めることができます。bc(Bash Calculator)は、指定した小数点以下の桁数までの計算をサポートするコマンドライン電卓です。
echo "scale=2;22/7" | bcここでscaleは、出力に必要な小数点以下の桁数を定義しています。

ユーザー入力を読み取る方法
場合によっては、ユーザーからの入力を受け取り、それに関連する処理を行う必要があります。
Bashでは、readコマンドを使ってユーザー入力を受け取れます。
read variable_nameカスタムメッセージを表示してユーザーに入力を促すには、-pオプションを使用します。
read -p "Enter your age" variable_name例:
#!/bin/bash
echo "Enter a number"
read a
echo "Enter a number"
read b
var=$((a+b))
echo $var
数値比較演算子
比較は、条件文がtrue(真)またはfalse(偽)と評価されるかを確認するために使われます。2つの値を比較するには、以下の演算子を使用します。
| 比較内容 | 構文 | 説明 |
|---|---|---|
| 等しい | num1 -eq num2 | num1はnum2と等しいか |
| 以上 | num1 -ge num2 | num1はnum2以上か |
| より大きい | num1 -gt num2 | num1はnum2より大きいか |
| 以下 | num1 -le num2 | num1はnum2以下か |
| より小さい | num1 -lt num2 | num1はnum2より小さいか |
| 等しくない | num1 -ne num2 | num1はnum2と等しくないか |
構文:
if [ conditions ]
then
commands
fi例:
2つの数値を比較して、その大小関係を判定してみましょう。
read x
read y
if [ $x -gt $y ]
then
echo X is greater than Y
elif [ $x -lt $y ]
then
echo X is less than Y
elif [ $x -eq $y ]
then
echo X is equal to Y
fi実行結果:

条件分岐(意思決定)
条件とは、真偽値(trueまたはfalse)に評価される式のことです。条件をチェックするには、if、if-else、if-elif-else、そしてネストした条件分岐を使用できます。
条件分岐の構造は以下の通りです。
if...then...fi文if...then...else...fi文if..elif..else..fiif..then..else..if..then..fi..fi..(ネストした条件分岐)
構文:
if [[ condition ]]
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fiより意味のある比較を行うには、AND(-a)やOR(-o)も併用できます。
以下の文は「aが40より大きく、かつbが6より小さい場合」という意味になります。
if [ $a -gt 40 -a $b -lt 6 ]例:三角形の各辺の長さを読み込んで、三角形の種類を判定してみましょう。
read a
read b
read c
if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL
elif [ $a == $b -o $b == $c -o $a == $c ]
then
echo ISOSCELES
else
echo SCALENE
fi実行結果:
テストケース #1

テストケース #2

テストケース #3

ループ処理
forループを使うと、指定した回数だけ文を実行できます。
数値によるループ:
以下の例では、ループが5回繰り返されます。
#!/bin/bash
for i in {1..5}
do
echo $i
done
文字列によるループ:
文字列に対してもループ処理が可能です。
#!/bin/bash
for X in cyan magenta yellow
do
echo $X
done
Whileループ
whileループは条件をチェックし、条件がtrueである限りループを継続します。ループの実行を制御するには、カウンターを増加させるステートメントを用意する必要があります。
以下の例では、(( i += 1 ))がカウンターのステートメントで、iの値を増加させています。
例:
#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
echo "$i"
(( i += 1 ))
done
ファイルの読み込み
以下のようなsample_file.txtファイルがあるとします。

ファイルを1行ずつ読み込み、画面に出力することができます。
#!/bin/bash
LINE=1
while read -r CURRENT_LINE
do
echo "$LINE: $CURRENT_LINE"
((LINE++))
done < "sample_file.txt"実行結果:

バッククォートでコマンドを実行する方法
複雑なコマンドの出力結果をスクリプト内に組み込みたい場合は、そのステートメントをバッククォート(`)で囲んで記述します。
構文:
var=`commands`例: 名前にtmpfsを含むマウントポイントのリストを出力したいとします。この場合、df -h | grep tmpfsのようなコマンドを作成できます。
これをBashスクリプトに組み込むには、バッククォートで囲みます。
#!/bin/bash
var=`df -h | grep tmpfs`
echo $var実行結果:

コマンドラインからスクリプトに引数を渡す方法
スクリプトの実行時に引数を渡すことも可能です。
$@は、1から始まるパラメーターの位置を表します。
#!/bin/bash
for x in $@
do
echo "Entered arg is $x"
done以下のように実行します。
./script arg1 arg2
cronジョブによるスクリプトの自動化
Cronは、Unix系システムに搭載されているジョブスケジューリングユーティリティです。毎日、毎週、毎月、または1日の特定の時刻にジョブを実行するようスケジュールできます。Linuxにおける自動化は、cronジョブに大きく依存しています。
cronのスケジュール構文は以下の通りです。
# Cron job example
* * * * * sh /path/to/script.shここで*は、それぞれ分・時・日・月・曜日を表します。
cronジョブのスケジュール設定例をいくつか紹介します。
| スケジュール | 実行タイミング |
|---|---|
| 5 0 * 8 * | 8月の毎日 00:05 |
| 5 4 * * 6 | 毎週日曜日の 04:05 |
| 0 22 * * 1-5 | 月曜日から金曜日までの毎日 22:00 |
cronについて詳しく知りたい方は、専用の解説記事をご覧ください。
システム内の既存スクリプトを確認する方法
crontabを使う方法
crontab -lコマンドで、特定のユーザーに登録済みのスケジュール済みスクリプトを一覧表示できます。

findコマンドを使う方法
findコマンドは、特定のパターンに基づいてファイルを検索するのに役立ちます。ほとんどのスクリプトは.shで終わるため、以下のようにfindコマンドを使えます。
find . -type f -name "*.sh"各オプションの意味は以下の通りです。
.: カレントディレクトリを表します。必要に応じてパスを変更できます。-type f: 検索対象が通常のテキストベースのファイルであることを示します。*.sh:.shで終わるすべてのファイルに一致させることを指定します。

findコマンドについて詳しく知りたい方は、他の解説記事も参考にしてください。
まとめ
このチュートリアルでは、シェルスクリプティングの基礎を学びました。実用的なプログラムを書くのに役立つ具体例と構文を紹介しました。
このチュートリアルで特に役立ったと感じた内容は何でしたか?ぜひフィードバックをお聞かせください。
画像:Work vector created by macrovector - www.freepik.com
-
Windows 10にBash(Linuxシェル)をインストールして使う方法【WSL完全ガイド】
Windows上でLinuxシェルをセットアップして使う方法を、Windows Subsystem for Linux(WSL)を使って解説します。 このチュートリアルは、2020年以降にリリースされた最新版のWindows 10を対象としています。古いバージョンのWindows 10でのWSLの使い方や、Windows 8/7/XP向けの別の方法については扱いません。サポートが終了したソフトウェアの使用は避けるべきだからです。どうしてもWindowsを使わなければならない場合は、必ずセキュリティ更新プログラムが提供されているバージョンを使用してください。 WSLは非常に優れたツールで、まるで
-
Windows 10にLinux Bashシェルをインストールする方法【WSL設定ガイド】
Bashシェルとは?Windows 10でLinuxが動く仕組み Bashシェルは、長年にわたりLinuxに搭載されてきたコマンドラインユーティリティです。そして現在、MicrosoftはこのBashシェルをWindows 10に直接組み込みました。これは仮想マシンでも、コンテナでも、Windows向けにコンパイルされたソフトウェアでもありません。実態は、Linuxソフトウェアを実行するための「Windows Subsystem for Linux(WSL)」というサブシステムであり、AndroidアプリをWindows上で動かすために開発されていた(後に中止された)Project Asto