Bashの基本シリーズのこの章では、Bashスクリプトにパラメータを渡して対話型にする方法を学びます。
Bashスクリプトにパラメーターを持たせましょう
Bashスクリプトに変数を渡すことで、より便利でインタラクティブなスクリプトにすることができます。
例を挙げて詳しく説明しましょう。
シェルスクリプトへのパラメータの渡し方
シェルスクリプトを実行する際、以下のように他の変数を追加することができます:
./my_script.sh var1 var2
スクリプトの中では、$1を最初のパラメーター、$2を2番目のパラメーター、といった具合に使います。
0は、実行されるスクリプトの名前を保持する特別な変数です。
実践的な例を見てみましょう。練習用のBashスクリプトを保存したディレクトリに移動します。
mkdir -p bash_scripts && cd bash_scripts
次に、 arguments.sh 新しいシェルスクリプトを作成し、次の行を追加します:
#!/bin/bashecho "Script name is: $0"echo "First argument is: $1"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コマンドはこの機能を提供します。次のように使います:
echo "Enter something"read var
上記のechoコマンドは必須ではありませんが、エンドユーザーは入力が必要であることを知ることはありません。ユーザーがエンターキーを押したときに入力した内容は、すべてvar変数に格納されます。
以下のように、プロンプトメッセージを表示し、1行で値を取得することもできます:
read -p "Enter something? " var
実際に使ってみましょう。以下の内容で新しい interactive.sh シェルスクリプトを作成します:
#!/bin/bashecho "What is your name, stranger?"read nameread -p "What's your full name, $name? " full_nameecho "Welcome, $full_name"
上の例では、name変数を使って名前を取得しています。次に、name変数をプロンプトで使用し、full_name変数でユーザー入力を取得しています。readコマンドの使い方として、2つの方法を使いました。
さて、実行許可を与えてこのスクリプトを実行すると、スクリプトは What is your name, stranger?表示し、キーボードから何かを入力するのを待ちます。入力すると、What's your full nameというメッセージが表示され、再び入力を待ちます。
演習時間
学んだことを実践してみましょう。以下のシナリオで簡単なBashスクリプトを書いてみてください。
練習1:3つのパラメーターを持つスクリプトを書いてください。スクリプトはパラメーターを逆順に表示しなければなりません。
期待される成果
abhishek@itsfoss:~/bash_scripts$ ./reverse.sh ubuntu fedora archArguments in reverse order:arch fedora ubuntu
練習2:渡された引数の数を表示するスクリプトを書いてください。
ヒント:特別な変数$#を使います。
期待される成果
abhishek@itsfoss:~/bash_scripts$ ./arguments.sh one and two and threeTotal number of arguments: 5
練習3:ファイル名をパラメータとして受け取り、その行番号を表示するスクリプトを書いてください。
ヒント:行数を計算するにはwcコマンドを使います。
コミュニティで解決策を話し合うことができます。
よくできました! 次の章では、Bashで基本的な数学演算を行う方法を学びます。





