Menu
Coddy logo textTech

スクリプトでのユーザー入力

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つのスクリプトを書けます。

challenge icon

チャレンジ

簡単

ユーザーに好きな色を尋ね、その入力を使ってメッセージを表示する greeter.sh というシェルスクリプトを作成してください。

スクリプトでは、次のことを行ってください。

  1. shebang 行(#!/bin/bash)で開始する
  2. -p フラグとともに read を使用して、プロンプト What is your favorite color? を表示する
  3. 入力を color という変数に保存する
  4. 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!" を使って結果を表示します。

自分で試してみよう

ターミナル
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Terminalプレイグラウンド