第7回 標準入力をreadで受け取ろう:入力待ちと変数への代入の基本 | はじめてのシェルスクリプト

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第7回 標準入力をreadで受け取ろう:入力待ちと変数への代入の基本 | はじめてのシェルスクリプト

はじめてのシェルスクリプト | 第7回

目次

はじめに

はじめに この連載では、macOS のターミナルで sh を使いながら、シェルスクリプトの基本を順番に学んでいきます。 前回(第6回)では、コマンドライン引数を使って、スクリプトの外から値を渡す方法を学びました。$1$2 を使うことで、実行のたびに異なる値を受け取れることを確認しましたね。

さて、コマンドライン引数はスクリプトを実行するときにあらかじめ値を渡す方法でした。しかし実際の場面では、スクリプトが動いている最中に「名前を入力してください」「ファイル名を教えてください」といった形でユーザーに問いかけ、その答えを受け取りたいことがあります。

第7回では、そのような場面で使う read コマンドを学びます。read を使うと、スクリプトの実行中にキーボードからの入力を受け取り、変数へ入れることができます。引数との違いや入力待ちの動きを確認しながら、対話的なスクリプトの基本を身につけていきましょう。

この回で学ぶこと

  • read とは何か
  • 入力待ちになる動き
  • 入力値を変数に入れる方法
  • echo で入力内容を確認する方法
  • 対話的なスクリプトの基本
  • 空入力のときの動き
  • 初学者がつまずきやすい点

read とは何か

キーボードから入力を受け取る

read は、ターミナルから入力された内容を受け取るためのコマンドです。

入力された値は、指定した変数へ入ります。

たとえば、次のように書きます。

read name

この場合、入力された内容が name という変数に入ります。

Enter を押すまで待つ

read を実行すると、スクリプトは入力待ちの状態になります。

ユーザーが文字を入力して Enter キーを押すと、その値が変数へ入ります。

サンプルコード

read_sample.sh に次の内容を保存します。

#!/bin/sh

echo "Please enter your name:"
read name
echo "Hello, $name"

実行手順

1. ファイルを作成して保存する

エディタで read_sample.sh という名前のファイルを作成し、次の内容を保存します。

#!/bin/sh

echo "Please enter your name:"
read name
echo "Hello, $name"

2. スクリプトを実行する

次のコマンドを実行します。

sh read_sample.sh

実行すると、まず次のように表示されます。

Please enter your name:

ここで、たとえば Taro と入力して Enter キーを押します。

すると、次のように表示されます。

Hello, Taro

3. 空のまま Enter を押してみる

もう一度実行して、何も入力せずに Enter キーだけを押してみてください。

その場合、name は空のままになります。

実行結果は次のようになります。

Hello,

コードの読み方

echo “Please enter your name:”

この行は、ユーザーに入力を促すための表示です。

read name

この行で、キーボードからの入力を受け取ります。

入力された値は name に入ります。

echo “Hello, $name”

$name に入っている値を表示します。

入力が Taro なら、Hello, Taro と表示されます。

対話的なスクリプトの基本

対話的なスクリプトの基本 引数は実行時に一緒に渡す値でしたが、read は実行中にその場で入力を受け取ります。

この違いを少し整理してみましょう。引数を使う場合、sh greet.sh Taro のように、スクリプトを呼び出すときに値をまとめて渡します。つまり、実行前に渡す値が決まっている必要があります。一方、read を使う場合は、スクリプトが動いている途中で一度処理を止め、ユーザーの入力を待ちます。入力された値を受け取ってから、次の処理へ進む形です。

このように、実行中にユーザーの入力を待つスクリプトを対話的なスクリプトと呼びます。画面に質問を表示し、答えを受け取り、その内容に応じて処理を進める、という流れを作ることができます。

read を使うと、たとえば名前を聞いてから挨拶する、好きな食べ物を聞いてから返答するといった、ユーザーとやり取りしながら動くスクリプトを書けるようになります。この仕組みは、これから学ぶ条件分岐(if文)と組み合わせることで、さらに実用的な形へと発展していきます。

初学者がつまずきやすい点

read のあとで止まったように見える

これはエラーではなく、入力待ちの状態です。

文字を入力して Enter キーを押すと、次の処理へ進みます。

入力した値が表示されない

read name で受け取ったあとに、echo "$name" のように表示しているか確認してください。

空入力でも動くことを知らない

何も入力せずに Enter を押すと、変数には空の値が入ります。

そのため、表示結果も空を含む形になります。

よくあるエラー

入力しても思った表示にならない

変数名が一致しているか確認してください。

read name
echo "Hello, $name"

のように、受け取る変数名と表示する変数名をそろえます。

入力待ちのまま進まない

Enter キーを押していない可能性があります。

read は Enter が押されるまで処理を続けません。

表示結果が Hello, だけになる

空入力の可能性があります。

これは read の動作として正しい結果です。

練習用コード

次の内容で favorite_food.sh を作成して実行してみてください。

#!/bin/sh

echo "What is your favorite food?"
read food
echo "Your favorite food is $food"

好きな食べ物を入力した場合と、何も入力しない場合の両方を試してください。

この回で理解しておくこと

  • read はキーボードからの入力を受け取る
  • 入力された値は指定した変数へ入る
  • read は Enter キーが押されるまで待つ
  • echo と組み合わせると入力内容を確認できる
  • read を使うと対話的なスクリプトを作れる
  • 空入力のときは変数に空の値が入る

まとめ

今回は、read を使って標準入力を受け取り、変数へ入れて表示する方法を確認しました。

read を使うと、実行中にユーザーから値を受け取るスクリプトを作れます。

次回は、条件に応じて処理を分ける if 文を学びます。

次回予告

次回は「if文で条件分岐してみよう」です。

条件によって実行する処理を切り替える基本を確認します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次