シェルスクリプト初心者向け解説: readコマンドでユーザー入力を取得する方法

未分類

シェルスクリプトは、LinuxやUnixシステムで日常的に使われる自動化されたプロセスや繰り返し行われるタスクの処理に非常に便利です。その中で、readコマンドは、ユーザーからの入力をスクリプト内で受け取り活用するための基本的な手法です。この記事では、readコマンドの使い方や実践的な利用方法について詳しく解説します。

readコマンドとは?

readコマンドは、ユーザーからの入力をシェルスクリプト内で受け取り、その値を変数に格納するために使用されます。基本的な構文は以下の通りです。

read variable_name

ここで、variable_nameはユーザーの入力を保存する変数名です。ユーザーが入力を完了しEnterキーを押すと、その入力が指定した変数に格納されます。

基本的なreadコマンドの使用例

まずは、readコマンドを使った基本的なスクリプトを見てみましょう。

#!/bin/bash

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

このスクリプトは、ユーザーに名前の入力を促し、その名前をuser_nameという変数に格納します。その後、ユーザーの名前を使って挨拶を表示します。

複数の値を取得する

readコマンドは、単一の入力行から複数の値を取得することもできます。複数の変数名を指定すれば、ユーザーの入力がスペースで区切られ、それぞれの変数に格納されます。

#!/bin/bash

echo "Enter your first and last name:"
read first_name last_name
echo "Hello, $first_name $last_name!"

このスクリプトでは、ユーザーのフルネームを入力として受け取り、それぞれをfirst_namelast_nameとして変数に格納します。

-pオプションを使ったプロンプト表示

ユーザーから入力を求める際にプロンプトを指定することができます。-pオプションを使用すれば、プロンプトを直接readコマンドに組み込むことが可能です。

#!/bin/bash

read -p "Please enter your favorite color: " color
echo "Your favorite color is $color."

この方法により、echoコマンドを使わずにプロンプトを表示し、よりコンパクトで読みやすいスクリプトになります。

入力の非表示(パスワード入力)

時折、入力内容を画面上に表示させたくない場合があります。例えば、パスワードなどの機密情報を入力する際は-sオプションを使用します。

#!/bin/bash

read -sp "Enter your password: " password
echo
echo "Your password is stored securely."

このオプションによって、パスワード入力中に画面に表示されないようになります。

タイムアウトを設定する

ユーザーの入力を一定時間だけ待ち受けたい場合、-tオプションを使ってタイムアウトを設定します。このオプションを使用することで、ユーザーの応答時間を制限できます。

#!/bin/bash

if read -t 5 -p "What's your favorite number? " number; then
    echo "You entered: $number"
else
    echo "Time is up!"
fi

上記のスクリプトでは、ユーザーが5秒以内に応答しない場合、自動的にタイムアウトして終了メッセージを表示します。

IFSの変更による入力方法の調整

シェルスクリプトでは、IFS(Internal Field Separator)を変更することで、readコマンドの振る舞いを調整できます。デフォルトではスペース、タブ、改行が区切り文字ですが、IFSを変更することで縛りを変えることができます。

#!/bin/bash

old_ifs="$IFS"
IFS=","
echo "Enter your three favorite foods, separated by commas:"
read food1 food2 food3
IFS="$old_ifs"
echo "You like $food1, $food2, and $food3."

ここでは、コンマを利用して入力項目を区切っています。ユーザーはカンマで区切った文字列を入力することで、複数の値を扱うことができます。

まとめ

readコマンドはシェルスクリプトにおいて非常に強力で多用途なツールであり、ユーザーからの入力を受け取る最も基本的な方法です。本記事では、その基本的な使い方から、複数の値の受け取り、プロンプトの設定、タイムアウトの設定、そしてIFSを利用した入力例までを紹介しました。これらのテクニックを駆使することで、より柔軟でユーザーインタラクティブなシェルスクリプトを作成することが可能になるでしょう。最初は基本から学び、徐々に応用技術に挑戦してみてください。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント