新Linux入門|シェルスクリプトの作り方を理解しよう!基本構造と実行手順

 シェルスクリプトを使いこなしてくると、「毎回ちょっと違うファイル名を処理したい」「コピー先を毎回変えたい」といった場面が出てきます。
そんなときに活躍するのが 「引数(arguments)」 です。

 スクリプトに引数を渡すことで、同じスクリプトでも状況に応じた柔軟な動作ができるようになります。
たとえば、コピー元とコピー先を毎回指定できるようにすれば、再利用性がぐっと高まります。

ここでは、引数の使い方・特殊変数・実践例 をわかりやすく紹介します。

💡 引数とは?

シェルスクリプトにおける 引数 とは、スクリプトを実行するときに渡す追加情報 のことです。
プログラムに“入力値”を渡して動作を変えるようなイメージです。

📘 基本構文

./スクリプト名 引数1 引数2 引数3 ...

たとえば、次のようなスクリプトを考えてみましょう。

📘 myscript.sh

#!/bin/bash
echo "The first argument is: $1"
echo "The second argument is: $2"

このスクリプトを実行する際に、引数を渡すとこうなります。

[suzuki@AlmaLinux ~]$ ./myscript.sh apple banana
The first argument is: apple
The second argument is: banana

💬 $1, $2 はそれぞれ「1番目」「2番目」の引数を表します。

🧮 よく使う特殊変数

シェルスクリプトでは、引数やスクリプト情報を扱うための特殊変数が用意されています。
次の表にまとめました。

変数内容使用例
$0スクリプトの名前./myscript.sh
$1, $2, $3それぞれ 1番目〜3番目の引数$1 → apple
$@すべての引数をまとめて扱うarg1 arg2 arg3
$#引数の個数3
$?直前のコマンドの終了ステータス0(成功) or 0以外(失敗)

🧰 全ての引数にアクセスする

引数がたくさんある場合、1つずつ $1、$2 と指定するのは大変ですよね。
そんなときに便利なのが $@ です。

📘 例

#!/bin/bash
echo "All arguments: $@"

📘 実行結果

[suzuki@AlmaLinux ~]$ ./myscript.sh red blue green
All arguments: red blue green

💬 $@ は「渡されたすべての引数」を一括で展開します。
ループ処理(for文など)と組み合わせることで、まとめて処理を行うこともできます。

🔢 引数の数を確認する

引数がいくつ渡されたかを知りたい場合は、$# を使います。

📘 例

#!/bin/bash
echo "Number of arguments: $#"

📘 実行結果

[suzuki@AlmaLinux ~]$ ./myscript.sh red blue green
Number of arguments: 3

💬 スクリプトの引数チェック(例:2個なければエラー)を行うときに役立ちます。

🧾 スクリプト名を取得する($0)

$0 は「スクリプトのファイル名」を表します。
スクリプトの使用方法を表示するときによく使われます。

📘 例

#!/bin/bash
echo "Script name: $0"

📘 実行結果

[suzuki@AlmaLinux ~]$ ./myscript.sh
Script name: ./myscript.sh

💬 これを利用すれば「Usage(使い方)」メッセージの自動生成もできます。

📦 実践例:引数を使ったファイルコピー

ここでは、引数を2つ使って、ファイルコピーを自動化するスクリプトを作ってみましょう。

📘 copy_file.sh

#!/bin/bash

# 引数の数をチェック
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 source_file destination_directory"
    exit 1
fi

# 引数を変数に代入
source_file="$1"
destination_directory="$2"

# ファイルをコピー
cp "$source_file" "$destination_directory"

echo "File copied from $source_file to $destination_directory"

📘 実行例

[suzuki@AlmaLinux ~]$ ./copy_file.sh myfile.txt /home/suzuki/backup/
File copied from myfile.txt to /home/suzuki/backup/

💬 このように、引数を活用することで 「どのファイルを」「どこへ」 といった動的な処理を柔軟に実行できます。

🧷 クォーテーションの重要性(空白を含む引数)

引数に空白を含む場合は、ダブルクォーテーション( " )で囲む 必要があります。
クォーテーションがないと、空白が引数の区切りとして解釈されてしまいます。

📘 例

#!/bin/bash
echo "First argument: $1"
echo "Second argument: $2"

📘 正しい実行方法

[suzuki@AlmaLinux ~]$ ./myscript.sh "arg with space" test
First argument: arg with space
Second argument: test

📘 誤った実行方法

[suzuki@AlmaLinux ~]$ ./myscript.sh arg with space test
First argument: arg
Second argument: with

💬 空白を含む文字列を扱うときは、必ず " " で囲みましょう。

✅ まとめ

  • 引数は、スクリプトの動作を柔軟にする“入力値”
  • $1, $2, $@, $#, $0 などの特殊変数を使って制御できる
  • 引数チェックで正しい使い方を促すこともできる
  • 空白を含む引数は " " で囲むのがポイント
  • 実践ではファイル操作や環境設定、自動バックアップなどに応用できる

💬 引数を使いこなせば、同じスクリプトを「万能ツール」に変えることができます。
次は、条件分岐やループ と組み合わせて、より賢いスクリプトづくりに挑戦してみましょう!