スクリプトでのユーザー入力
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 というシェルスクリプトを作成してください。
スクリプトでは、次のことを行ってください。
- shebang 行(
#!/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 'echo "Hello $name"' >> script.sh。シングルクォートを使うと、ファイルの書き込み中にシェルが$nameを置き換えないため、スクリプト内に変数がそのまま保持され、実行時に展開されます。ダブルクォートを使うと、値がすぐに置き換えられます。
ヒント: リダイレクトと
echoを使って、スクリプトを1行ずつ組み立ててください。read -p "What is your favorite color? " colorを使って入力を促して取得し、続いてecho "Nice! $color is a great color!"を使って結果を表示します。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Terminalプレイグラウンド