blog

ソフトウェア開発|Bash基礎シリーズ 第3回: 引数を渡してユーザ入力を受け取る

Bash 基礎シリーズのこの章では、Bash スクリプトにパラメータを渡して対話的にする方法を学びます。...

Oct 9, 2025 · 5 min. read
シェア

Bashの基本シリーズのこの章では、Bashスクリプトにパラメータを渡して対話型にする方法を学びます。

Bashスクリプトにパラメーターを持たせましょう

Bashスクリプトに変数を渡すことで、より便利でインタラクティブなスクリプトにすることができます。

例を挙げて詳しく説明しましょう。

シェルスクリプトへのパラメータの渡し方

シェルスクリプトを実行する際、以下のように他の変数を追加することができます:

  1. ./my_script.sh var1 var2

スクリプトの中では、$1を最初のパラメーター、$2を2番目のパラメーター、といった具合に使います。

0は、実行されるスクリプトの名前を保持する特別な変数です。

実践的な例を見てみましょう。練習用のBashスクリプトを保存したディレクトリに移動します。

  1. mkdir -p bash_scripts && cd bash_scripts

次に、 arguments.sh 新しいシェルスクリプトを作成し、次の行を追加します:

  1. #!/bin/bash
  2. echo "Script name is: $0"
  3. echo "First argument is: $1"
  4. echo "Second argument is: $2"

ファイルを保存し、実行可能な状態にします。いつものようにスクリプトを実行し、今回は任意の2つの文字列を追加してください。画面に詳細が表示されます。

パラメータはスペースで区切られます。パラメータにスペースがある場合は、二重引用符で囲んでください。

Bashスクリプトは255個までの引数をサポートしています。しかし、引数が10以上の場合、中括弧 ${10}, ${11}... を使わなければなりません。${n}.

ご覧のように、$0はスクリプトの名前を表し、残りのパラメータは番号付きの変数に格納されます。スクリプトでは、他にも特殊な変数を使用することができます。

$0 スクリプト名
$1, $2, ......$9 スクリプト名
${n}
$# パラメータ数
$@ すべてのパラメータ
$$ 現在のシェルのプロセスID
$! 最後に実行されたコマンドのプロセスID
$? 最後に実行されたコマンドの終了ステータス

上記のスクリプトを修正して、パラメータの数を表示します。

パラメータの数が一致しない場合は?

上記の例では、Bashスクリプトに2つのパラメータを指定し、スクリプト内で使用しました。

しかし、パラメータが1つしかない場合や、3つしかない場合はどうでしょうか?

実際にやってみましょう。

上記でお分かりのように、予想以上に多くのパラメータを与えても、結果は変わりません。他のパラメータは使用されないので、問題は生じません。

しかし、パラメータが予想より少ないと、スクリプトは空白になります。これは、スクリプトの一部が不足しているパラメータに依存している場合に問題となります。

ユーザー入力を受け付け、対話的なBashスクリプトを作成します。

また、ユーザーにキーボードからの入力を促すBashスクリプトを作成することもできます。これにより、スクリプトがインタラクティブになります。

readコマンドはこの機能を提供します。次のように使います:

  1. echo "Enter something"
  2. read var

上記のechoコマンドは必須ではありませんが、エンドユーザーは入力が必要であることを知ることはありません。ユーザーがエンターキーを押したときに入力した内容は、すべてvar変数に格納されます。

以下のように、プロンプトメッセージを表示し、1行で値を取得することもできます:

  1. read -p "Enter something? " var

実際に使ってみましょう。以下の内容で新しい interactive.sh シェルスクリプトを作成します:

  1. #!/bin/bash
  2. echo "What is your name, stranger?"
  3. read name
  4. read -p "What's your full name, $name? " full_name
  5. echo "Welcome, $full_name"

上の例では、name変数を使って名前を取得しています。次に、name変数をプロンプトで使用し、full_name変数でユーザー入力を取得しています。readコマンドの使い方として、2つの方法を使いました。

さて、実行許可を与えてこのスクリプトを実行すると、スクリプトは What is your name, stranger?表示し、キーボードから何かを入力するのを待ちます。入力すると、What's your full nameというメッセージが表示され、再び入力を待ちます。

演習時間

学んだことを実践してみましょう。以下のシナリオで簡単なBashスクリプトを書いてみてください。

練習1:3つのパラメーターを持つスクリプトを書いてください。スクリプトはパラメーターを逆順に表示しなければなりません。

期待される成果

  1. abhishek@itsfoss:~/bash_scripts$ ./reverse.sh ubuntu fedora arch
  2. Arguments in reverse order:
  3. arch fedora ubuntu

練習2:渡された引数の数を表示するスクリプトを書いてください。

ヒント:特別な変数$#を使います。

期待される成果

  1. abhishek@itsfoss:~/bash_scripts$ ./arguments.sh one and two and three
  2. Total number of arguments: 5

練習3:ファイル名をパラメータとして受け取り、その行番号を表示するスクリプトを書いてください。

ヒント:行数を計算するにはwcコマンドを使います。

コミュニティで解決策を話し合うことができます。

よくできました! 次の章では、Bashで基本的な数学演算を行う方法を学びます。

Read next