スクリプトの引数とオプション($@、$#、getopts)
スクリプトに引数を渡す方法と、特殊変数や「getopts」を使ってコマンドラインオプションを解析する方法を学びます。
「スクリプトの引数とオプション($@、$#、getopts)」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
スクリプト引数:なぜ使うのか
ls -lやcp file1 file2のようなコマンドを使ったことはありますか。-l、file1、file2はすべて引数です。これらは、コマンドに何をするか、または何を対象にするかを伝えます。
Bashスクリプトでは、引数によってスクリプトの柔軟性が高まります。値をハードコードする代わりに、実行時にコマンドラインから直接入力を受け取れるようになります。
位置パラメータにアクセスする
引数付きでスクリプトを実行すると、Bashは引数を位置パラメータと呼ばれる特殊変数に自動的に割り当てます。
- 1番目の引数は
$1です。 - 2番目の引数は
$2です。 - 同様に、
$9まで続きます。
9番目を超える引数には、${10}、${11}のように中かっこを使います。これらの変数には、スクリプトに渡された値が格納されます。
デモ:位置パラメータ
スクリプト内でこれらの引数にアクセスする方法を見てみましょう。これをgreet.shとして保存し、./greet.sh Alice Bobで実行してください。
#!/bin/bash
echo "Hello, $1!"
echo "Welcome, $2."
echo "The third argument (if any) is: $3"`$0`と`$#`:スクリプト情報
Bashには、スクリプト自体とその引数に関する情報を提供する特殊変数がほかにもいくつかあります。
$0:実行中のスクリプト名が格納されます。エラーメッセージやログに役立ちます。$#:スクリプトに渡された位置パラメータの総数が格納されます。
これらを使うと、より堅牢で使いやすいスクリプトを作成できます。
デモ:`$0`と`$#`
引数の数を変えてこのスクリプトを実行してください。たとえば、./info.sh one two threeや、引数なしの./info.shで実行します。
#!/bin/bash
echo "Script name: $0"
echo "Number of arguments received: $#"`$@`と`$*`:すべての引数
すべての引数を一度に参照する必要がある場合があります。Bashには2つの方法があります。
$@:引数を個別に展開します。二重引用符で囲んだ場合("$@")、空白を含む引数でも、それぞれ独立した単語として保持されます。通常、ループではこちらが推奨されます。$*:すべての引数を1つの文字列として展開します。二重引用符で囲んだ場合("$*")、すべての引数が1つの単語に結合され、IFS(Internal Field Separator、通常は空白)の最初の文字で区切られます。
引数を反復処理するときは、空白を保持するために必ず"$@"を使ってください。
デモ:`"$@"`を使ったループ
このスクリプトでは、"$@"が空白を含む引数を正しく処理する方法を示します。次のように実行してください。./loop_args.sh hello "world wide" web
#!/bin/bash
echo "Processing arguments with \"$@\":"
for arg in "$@"; do
echo " Argument: [$arg]"
done
echo "\nProcessing arguments with \"$*\":"
for arg in "$*"; do
echo " Argument: [$arg]"
doneオプション:位置引数の先へ
位置引数は単純な場合に便利ですが、-v(詳細表示)や-f filenameのような省略可能なフラグや名前付きパラメータがスクリプトに必要な場合はどうすればよいでしょうか。
このような場合にコマンドラインオプションを使います。ユーザーが設定を任意の順序で指定できるため、スクリプトの柔軟性と使いやすさが向上します。
Bashには、この種類のオプションを解析するためのgetoptsコマンドが用意されています。
`getopts`の構文:`optstring`
getoptsの基本構文は、getopts optstring variableです。
optstring:有効なオプション文字の文字列です。-f filenameのようにオプションに引数が必要な場合は、文字の後ろにコロンを付けます(例:f:)。variable:getoptsが現在処理しているオプション文字を格納する変数名です(例:opt)。
getoptsは、オプションの引数をOPTARGに、次の引数のインデックスをOPTINDに設定します。
デモ:基本的な`getopts`
このスクリプトは、-v(詳細表示)オプションと-f(ファイル)オプションを処理します。./options.sh -v -f mydata.txt -xまたは./options.sh -vf mydata.txtを実行してみてください。
#!/bin/bash
while getopts "vf:" opt; do
case $opt in
v)
echo "Verbose mode enabled."
;;
f)
echo "File specified: $OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
doneクイックチェック:引数の変数
次のスクリプトと、その実行方法を考えてみましょう。
#!/bin/bash
echo "Script: $0"
echo "Count: $#"
for arg in "$@"; do
echo "Arg: $arg"
done次のように実行した場合:./myscript.sh "Hello World" 123
出力はどうなるでしょうか。
まとめ:引数とオプション
よくできました。Bashスクリプトをより柔軟にする方法を学びました。
- 位置引数:
$1、$2などを使って、引数に直接アクセスします。 - 特殊変数:スクリプト名には
$0、引数の数には$#、すべての引数の安全な反復処理には"$@"を使います。 - コマンドラインオプション:
getoptsを使って、名前付きオプション(-vなど)とその引数(-f filename)を解析します。これにより、より堅牢で使いやすいスクリプトを作成できます。
これらを自分のスクリプトで練習し、強力で柔軟なコマンドラインツールを作成しましょう。
よくある質問
「スクリプトの引数とオプション($@、$#、getopts)」レッスンは無料ですか?
はい。「スクリプトの引数とオプション($@、$#、getopts)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「スクリプトの引数とオプション($@、$#、getopts)」で何を学びますか?
スクリプトに引数を渡す方法と、特殊変数や「getopts」を使ってコマンドラインオプションを解析する方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「スクリプトの引数とオプション($@、$#、getopts)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ループ構文(for、while)
- Bashスクリプトの関数
- スクリプトの引数とオプション($@、$#、getopts)
- case文とパターンマッチング