はじめに
シェルプログラミングにおいて、スクリプトに引数を渡す機能は、基本的かつ強力な機能です。コマンドラインからの入力を受け付けることで、スクリプトをより柔軟で再利用可能にすることができます。この実験では、コマンドライン引数を受け付けて使用できるシェルスクリプトを作成するプロセスを案内します。スクリプト内でこれらの引数にアクセスする方法、複数の引数を処理する方法、および効率的に処理するための特殊な変数の使用方法を学びます。
シェルプログラミングにおいて、スクリプトに引数を渡す機能は、基本的かつ強力な機能です。コマンドラインからの入力を受け付けることで、スクリプトをより柔軟で再利用可能にすることができます。この実験では、コマンドライン引数を受け付けて使用できるシェルスクリプトを作成するプロセスを案内します。スクリプト内でこれらの引数にアクセスする方法、複数の引数を処理する方法、および効率的に処理するための特殊な変数の使用方法を学びます。
まずは新しいスクリプトファイルを作成しましょう。この実験ではWebIDE(VS Code)を使用します。
/home/labex/project
ディレクトリに移動します。arguments.sh
と名前を付けます。これでファイルを作成したので、スクリプトの基本構造を追加しましょう:
#!/bin/bash
## ここにコードを記述します
最初の行は「シェバン」または「ハッシュバン」と呼ばれます。これは、スクリプトを実行するために使用するインタプリタをシステムに知らせます。この場合、bashを使用しています。
初心者向けに:シェバン行は重要です。なぜなら、これにより毎回 bash arguments.sh
と入力する代わりに、直接 ./arguments.sh
のようにスクリプトを実行できるようになるからです。小さな細かい点ですが、スクリプトの使いやすさを向上させます。
次に、渡された引数にアクセスして表示するようにスクリプトを修正しましょう。シェルスクリプティングでは、特殊な変数を使ってコマンドライン引数にアクセスします:
$0
は、スクリプト自体の名前を表します$1
, $2
, $3
, などは、最初の引数、2番目の引数、3番目の引数などを表しますarguments.sh
ファイルに次のコードを追加します:
#!/bin/bash
echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"
このスクリプトは、スクリプト名と渡された最初の3つの引数を表示します。
初心者向けに:
$
シンボルは、bashで変数を参照するために使用されます。$0
, $1
, $2
, などは、引数付きでスクリプトを実行するときにbashが自動的に設定する特殊な変数です。$1
, $2
, $3
は空になりますが、スクリプトはエラーなく実行されます。スクリプトを実行する前に、実行可能にする必要があります。これは chmod
コマンドを使用して行います。ターミナルで、プロジェクトディレクトリに移動して、次のコマンドを実行します:
cd /home/labex/project
chmod +x arguments.sh
chmod +x
コマンドは、ファイルに実行許可を追加し、スクリプトとして実行できるようにします。
初心者向けに:
chmod
は「モード変更」を意味します。ファイルやディレクトリのパーミッションを変更するために使用されます。+x
オプションは実行許可を追加します。これは、bashがファイルをスクリプトとして実行できるようにするために必要です。これでスクリプトが実行可能になったので、いくつかの引数を付けて実行しましょう。ターミナルで、次のコマンドを実行します:
./arguments.sh hello world example
次のような出力が表示されるはずです:
Script name:./arguments.sh
First argument: hello
Second argument: world
Third argument: example
この出力は、スクリプトが正常にコマンドライン引数にアクセスして表示したことを示しています。
初心者向けに:
./
は、bashに対して現在のディレクトリからスクリプトを探すように指示します。./arguments.sh "hello world" example
引数の数が異なる場合を処理するようにスクリプトを修正しましょう。渡された引数の数を保持する特殊な変数 $#
を使用します。
arguments.sh
ファイルを次の内容で更新します:
#!/bin/bash
if [ $## -eq 0 ]; then
echo "No arguments provided."
elif [ $## -eq 1 ]; then
echo "One argument provided: $1"
elif [ $## -eq 2 ]; then
echo "Two arguments provided: $1 and $2"
else
echo "More than two arguments provided:"
echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"
echo "Total number of arguments: $#"
fi
このスクリプトは、条件文を使って引数の数が異なる場合を処理します。
初心者向けに:
$#
は、スクリプトに渡された引数の数を含む特殊な変数です。[ $## -eq 0 ]
は、引数の数が0に等しいかどうかをチェックする条件です。elif
は「else if」の略です。これにより、複数の条件を順にチェックできます。-eq
演算子は「等しい」を意味します。他にも -lt
(未満)、-gt
(超過)などの演算子があります。次に、引数の数が異なる場合で更新されたスクリプトをテストしましょう:
./arguments.sh
./arguments.sh one
./arguments.sh one two
./arguments.sh one two three four
提供された引数の数に基づいて、異なる出力が表示されるはずです。
初心者向けに:
./arguments.sh
)と、スクリプトの最初の条件がトリガーされます。最後に、すべてのコマンドライン引数を表す特殊な変数 $@
を使って、提供されたすべての引数をループ処理するようにスクリプトを修正しましょう。
arguments.sh
ファイルを次の内容で更新します:
#!/bin/bash
echo "Total number of arguments: $#"
echo "All arguments:"
count=1
for arg in "$@"; do
echo "Argument $count: $arg"
count=$((count + 1))
done
このスクリプトは、for
ループを使ってすべての引数を反復処理し、それらをその位置とともに表示します。
初心者向けに:
$@
は、スクリプトに渡されたすべての引数を含む特殊な変数です。for
ループは、項目のリストを反復処理するために使用されます。この場合、すべての引数を反復処理しています。$((count + 1))
は、bash の算術展開です。カウント変数をインクリメントするために使用されます。複数の引数を使って最終版のスクリプトをテストしましょう:
./arguments.sh apple banana cherry date
次のような出力が表示されるはずです:
Total number of arguments: 4
All arguments:
Argument 1: apple
Argument 2: banana
Argument 3: cherry
Argument 4: date
これは、スクリプトが任意の数の引数を処理してすべてを表示できることを示しています。
初心者向けに:
この実験では、コマンドライン引数を受け取り処理するシェルスクリプトを作成する方法を学びました。いくつかの重要な概念を探りました:
これらのスキルはシェルスクリプトにおいて基本的なものであり、異なる入力に対応できるより柔軟で強力なスクリプトを作成することができます。シェルスクリプトのスキルをさらに磨き続けるうちに、コマンドライン引数を処理する能力は、システム管理と自動化におけるさまざまなタスクに対して汎用性と再利用性の高いスクリプトを作成するために不可欠であることがわかります。