スクリプトでのユーザー入力
CoddyのTerminalジャーニー「基礎」セクションの一部 — レッスン 69/82。
変数(変数名)は便利ですが、スクリプトの実行中にユーザーへ情報を入力してもらうよう求めたい場合もあります。read コマンドはスクリプトを一時停止してユーザーが入力するのを待ち、その入力を変数に保存します。
仕組みは以下の通りです:
#!/bin/bash
echo "What is your name?"
read name
echo "Hello, $name!"このスクリプトが実行されると、質問を出力し、ユーザーが名前を入力して Enter キーを押すのを待ってから挨拶します。read コマンドはユーザーが入力した内容を受け取り、変数 name に格納します。
プロンプトメッセージと入力を同じ行に結合する -p フラグを使用することで、プロンプトをよりすっきりとさせることができます。
#!/bin/bash
read -p "Enter your name: " name
echo "Hello, $name!"これにより Enter your name: と表示され、同じ行で入力を待機するため、より洗練された印象になります。-p フラグはプロンプトのテキストを引数として受け取り、その後に入力を保存する変数名が続きます。
ユーザー入力により、スクリプトはインタラクティブで適応性の高いものになります。値をハードコーディングする代わりに、ユーザーが実行するたびに提供する内容に応じて異なる動作をする1つのスクリプトを作成できます。
チャレンジ
簡単ユーザーにお気に入りの色を尋ね、その入力を使用してメッセージを表示する greeter.sh というシェルスクリプトを作成します。
スクリプトの要件:
- シバン行(
#!/bin/bash)で始めること -pフラグを付けたreadを使用して、次のようにプロンプトを表示すること:What is your favorite color?- 入力を
colorという変数に保存すること echoを使用して次のように出力すること:Nice! [color] is a great color!([color] はユーザーの入力値)
スクリプトを実行可能にし、入力として blue を渡して実行します。このターミナルは対話型ではないため、途中で停止して入力の入力を待つことができません。そのため、パイプを使ってスクリプトに回答を送ります:
echo "blue" | ./greeter.sh出力結果は以下のようになります:
Nice! blue is a great color!注: ここでは
What is your favorite color?のプロンプトは表示されません。read -pは入力がキーボードから行われた場合にのみプロンプトを出力しますが、ここではパイプから供給されているためです。
ヒント: リダイレクトを伴う
echoを使用して、スクリプトを1行ずつ構築します。入力の促しと取得にはread -p "What is your favorite color? " colorを使用し、結果の表示にはecho "Nice! $color is a great color!"を使用します。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。