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. シバン行(#!/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 を使用して、スクリプトを1行ずつ構築します。入力の促しと取得には read -p "What is your favorite color? " color を使用し、結果の表示には echo "Nice! $color is a great color!" を使用します。

自分で試してみよう

ターミナル
quiz icon腕試し

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

基礎のすべてのレッスン