Categories: linux

Linuxスクリプトの引数とは?$0・$1・$2の意味と使い方を徹底解説

Linuxでシェルスクリプトを書くときに登場する「$0」「$1」「$2」などの記号。初めて見ると「何これ?」と戸惑ってしまうかもしれませんが、これはスクリプトの引数を表す特殊な変数です。
スクリプトを汎用的に動かすためには、こうした引数の扱い方を理解しておくことがとても大切です。この記事では、Linuxスクリプトにおける引数の基本的な考え方から、「$0」「$1」「$2」の具体的な使い方、そして複数の引数を扱う応用テクニックまで、初心者の方にもわかりやすく解説します。


$0とは?:スクリプト自身の名前を表す変数

とは?:スクリプト自身の名前を表す変数

$0は、**実行されたスクリプトのファイル名(もしくはコマンド名)**を示します。

例を見てみましょう:

#!/bin/bash
echo "このスクリプトの名前は:$0"

このスクリプトを test.sh という名前で保存し、以下のように実行したとします。

bash test.sh

すると、次のような出力が得られます:

このスクリプトの名前は:test.sh

さらに、次のように絶対パスで実行した場合:

/home/user/scripts/test.sh

出力は以下のようになります:

このスクリプトの名前は:/home/user/scripts/test.sh

このように、$0はスクリプトをどう実行したかによって値が変わります。ログ出力やエラー表示などで、「このスクリプト内で何が起きたか」を伝える時に非常に便利です。


, , …:スクリプトに渡された引数を表す

次に登場するのが、$1, $2, $3 といった引数用の変数です。これらは、スクリプトに渡された引数を順番に参照するために使われます。

例:

#!/bin/bash
echo "1番目の引数:$1"
echo "2番目の引数:$2"

このスクリプトを args.sh として保存し、次のように実行します:

bash args.sh Hello World

すると出力は以下のようになります:

1番目の引数:Hello
2番目の引数:World

このように、コマンドラインで渡した引数は、順番に $1, $2, $3 … としてスクリプトの中で扱えます。


引数がいくつ渡されたかを知りたい:$#

スクリプトに渡された引数の個数を知りたい場合は、$#を使います。

#!/bin/bash
echo "渡された引数の数は:$#"

例えば、以下のように実行した場合:

bash count.sh arg1 arg2 arg3

出力は:

渡された引数の数は:3

この変数を利用すれば、「引数が足りない場合のエラーチェック」なども実装できます。


すべての引数を一度に参照する:$*と$@

$*$@は、渡されたすべての引数をまとめて扱いたいときに使用します。ただし、この2つには微妙な違いがあります。

$*の例:

#!/bin/bash
for arg in "$*"; do
echo "引数:$arg"
done

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

bash allargs.sh one two "three four"

出力:

引数:one two three four

$@の例:

#!/bin/bash
for arg in "$@"; do
echo "引数:$arg"
done

同じく実行すると:

引数:one
引数:two
引数:three four

このように、"$@"は各引数を個別に扱うのに対して、"$*"はすべてを一つの文字列としてまとめて扱う点が異なります。


引数がないときにメッセージを出す方法

スクリプトを実行する際に、必要な引数が渡されていない場合には、ユーザーに分かりやすく伝える処理を入れることも可能です。

例:

#!/bin/bash

if [ $# -lt 2 ]; then
echo "使い方:$0 引数1 引数2"
exit 1
fi

echo "引数1:$1"
echo "引数2:$2"

このようにすることで、引数の不足をチェックし、安全にスクリプトを運用することができます。


実践的な使い方:スクリプトでファイルをコピーする例

簡単な実用例として、「第1引数を第2引数にコピーする」スクリプトを作ってみましょう。

#!/bin/bash

if [ $# -ne 2 ]; then
echo "使い方:$0 コピー元ファイル コピー先ファイル"
exit 1
fi

cp "$1" "$2"
echo "$1 を $2 にコピーしました"

実行方法:

bash copy.sh file.txt backup.txt

このように、引数を使えばスクリプトを柔軟に扱えるようになります。


おわりに:引数を使ってスクリプトの汎用性を高めよう

Linuxスクリプトの世界では、引数を使いこなすことで再利用性が高く、柔軟で安全なコードを書くことができます。

  • $0はスクリプトの名前
  • $1, $2, …は実際の引数
  • $#は引数の数
  • $*$@はすべての引数を一括処理するために使える

この基本を押さえるだけでも、あなたのスクリプト作成能力はぐっと向上します。もし今後、スクリプトの実行ログを整えたり、複雑な処理を自動化したりする場面があれば、ぜひここで紹介した内容を活かしてみてください。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。