シェルスクリプトでは、実行するときに値を渡して、その値をスクリプト内で利用することができます。

例えば、次のようにスクリプトを実行します。

./sample.sh test.txt

このtest.txtのように、スクリプトの実行時に渡す値を**引数(ひきすう)**と呼びます。

引数を利用すると、スクリプトの内容を毎回変更することなく、処理対象を変更できます。

今回は、シェルスクリプトで引数を受け取る基本的な方法として、以下について解説します。

  • $1、$2、$3で引数を受け取る
  • $0でスクリプト自身の名前を取得する
  • $#で引数の数を取得する
  • 引数が指定されているかチェックする

1. シェルスクリプトに引数を渡す

まず、次のシェルスクリプトを作成します。

#!/bin/bash

echo "引数は $1 です。"

ファイル名をsample.shとして保存します。

このスクリプトを、次のように実行します。

./sample.sh test.txt

実行結果は次のようになります。

引数は test.txt です。

ここで使用している$1が、1番目の引数を表しています。

つまり、

./sample.sh test.txt

と実行した場合、

$1 → test.txt

となります。

$1は何を表している?

シェルスクリプトでは、実行時に渡された引数を番号で取得できます。

  • $1 → 1番目の引数
  • $2 → 2番目の引数
  • $3 → 3番目の引数

そのため、非常にシンプルに引数を利用できます。


2. $1、$2、$3で引数を受け取る

引数が複数ある場合は、それぞれの番号を指定します。

例えば、次のスクリプトを作成します。

#!/bin/bash

echo "1番目の引数: $1"
echo "2番目の引数: $2"
echo "3番目の引数: $3"

次のように実行します。

./sample.sh aaa bbb ccc

実行結果:

1番目の引数: aaa
2番目の引数: bbb
3番目の引数: ccc

このように、半角スペースで区切られた引数の位置によって取得する変数が決まっています。

変数意味
$11番目の引数
$22番目の引数
$33番目の引数

例えば、

./sample.sh input.txt output.txt

と実行した場合、

  • $1 → input.txt
  • $2 → output.txt

となります。

この仕組みを利用すると、入力ファイルと出力ファイルを指定するようなスクリプトを作ることができます。


3. $0は何を表す?

引数を扱うときに覚えておきたいのが$0です。

$0は、実行されたシェルスクリプト自身の名前を表します。

例えば、次のようなスクリプトを作成します。

#!/bin/bash

echo "スクリプト名: $0"
echo "1番目の引数: $1"

これを、

./sample.sh test.txt

と実行します。

実行結果:

スクリプト名: ./sample.sh
1番目の引数: test.txt

このように、

  • $0 → スクリプト自身
  • $1 → 1番目の引数
  • $2 → 2番目の引数
  • $3 → 3番目の引数

という関係になっています。

$0を使うメリット

$0は、エラー時に使用方法を表示するときなどに便利です。

例えば、

echo "使用方法: $0 ファイル名"

としておけば、スクリプト名を直接書かなくても、実行したスクリプトの名前を表示できます。


4. $#で引数の数を取得する

「引数が何個渡されたのか」を確認したい場合は、$#を使用します。

例えば、次のスクリプトを作成します。

#!/bin/bash

echo "引数の数: $#"

次のように実行します。

./sample.sh aaa bbb ccc

実行結果:

引数の数: 3

$#には、スクリプトに渡された引数の数が入ります。

例えば、

./sample.sh

なら、

  • $# → 0

となります。

また、

./sample.sh aaa

なら、

  • $# → 1

となります。


$#を使って引数の数をチェックする

$#は、実務でもよく利用します。

例えば、「引数を1つ指定しなければならない」スクリプトを作る場合です。

#!/bin/bash

if [ $# -ne 1 ]; then
    echo "使用方法: $0 ファイル名"
    exit 1
fi

echo "処理対象: $1"

このスクリプトは、引数が1個でなければエラーにします。

引数を指定せずに、

./sample.sh

と実行すると、

使用方法: ./sample.sh ファイル名

と表示されます。

一方、

./sample.sh test.txt

と実行すると、

処理対象: test.txt

と表示されます。

このように、$#で引数の数を確認してから処理を開始することで、引数不足による意図しないエラーを防ぐことができます。


まとめ

今回は、シェルスクリプトで引数を受け取る基本的な方法を紹介しました。

覚えておきたいのは、次の4つです。

変数意味
$0スクリプト自身の名前
$11番目の引数
$22番目の引数
$33番目の引数
$#引数の数

特に、

./sample.sh input.txt output.txt

のように実行した場合、

  • $0 → ./sample.sh
  • $1 → input.txt
  • $2 → output.txt
  • $# → 2

となることを覚えておくと、引数の仕組みを理解しやすくなります。

まずは$1、$2、$0、$#の4つを使えるようになるところから始めてみましょう。

ここまで読んでいただき、ありがとうございます。もしこの記事の技術や考え方に少しでも興味を持っていただけたら、ネクストのエンジニアと気軽に話してみませんか。

  • 選考ではありません
  • 履歴書不要
  • 技術の話が中心
  • 所要時間30分程度
  • オンラインOK

エンジニアと話してみる

関連リンク

AI・クラウド・データ分析のご相談はネクスト株式会社までお問い合わせください。