Bash のファイルまたはユーザー入力から読み取る

Muhammad Husnain 2024年2月15日
  1. BASH スクリプト
  2. Bash スクリプトの stdin からの入力
  3. バッシュファイル入力
Bash のファイルまたはユーザー入力から読み取る

BASH は、Bourne Shell(つまり、Steven Bourne によって作成された)を指すスマートな名前である Bourne Again Shell の省略形です。BASH は、Bourne Shell アプリケーション sh の更新バージョンとして Brian Fox によって開発されたシェルプログラムです。

この記事では、bash スクリプトの入力機能と、標準の入力コンソールおよびいくつかの特定のファイルから入力を取得する方法について説明します。さらに、アイデアを説明するために、複数のサンプルスクリプトも実行します。

BASH スクリプト

通常コマンドラインに配置する命令のリストを含むプレーンテキストファイルは、Bash Shell Script と呼ばれます。Bash は、一連のタスクを繰り返し実行する場合に特に便利です。

毎回同じ一連の取扱説明書を入力する代わりに、事前に作成された Bash スクリプトファイルを実行するだけで済みます。したがって、これにより多くの手作業が節約され、時間も節約されます。

Bash スクリプトのもう 1つの利点は、その必須のプログラミング機能です。これは、プロシージャ、条件付きステートメント、およびプログラミング言語(C/C++、Javascript など)のようなループ構造を記述できることを意味します。

Bash Script は、拡張子が .sh のテキストファイルです。これを作成するには、拡張子 .sh を指定した touch コマンドを使用します。

touch myscript.sh

gedit などの任意のテキストエディタで開くことができます。開くには、次のコマンドを使用します。

指示:

gedit myscipt.sh

#!/bin/bash という行を使用してシェルスクリプトを開始します。この行で #!一部は shebang と呼ばれ、残りの部分はオペレーティングシステムの bash インタープリターへのパスです。

その後、必要なコマンドのセットをスクリプトに記述して保存します。Bash スクリプトを実行するには、コマンド bash を使用します。

指示:

bash myscript.sh

これにより、スクリプトが実行され、スクリプトで使用されるコマンドの出力が得られます。

Bash スクリプトの stdin からの入力

ターミナルまたは Bash スクリプトの stdin からユーザー入力を取得することもできます。組み込みの Bash コマンド read を使用して、Bash ユーザー入力を読み取ることができます。

ユーザーの入力を受け入れ、それを変数に割り当てます。Bash シェルから 1 行しか読み取ることができません。

構文:

read <variable>

スペースで区切られた各単語は、異なる変数に保存されます。

Bash スクリプトの例:

#!/bin/bash
echo "Enter your name: "
read userName
echo "Enter your age: "
read userAge;
echo "Enter your 3 Subjects: "
read sub1 sub2 sub3
echo "The user $userName is $userAge years old and is specialized in $sub1, $sub2, and $sub3. "

この例では、ユーザーの名前、年齢、および 3つの科目の入力を取得しました。サブジェクトは個別の変数に保存されます。

出力:

Bash シェルから 1 行だけを読み取ります

read コマンドで変数名を指定することは必須ではありません。変数名を指定しない場合、デフォルトで値が REPLY 変数に格納されるため、後でスクリプトで使用できます。

Bash スクリプトの例:

#!/bin/bash
echo "Enter a number from 1-10: "
read
echo "You entered: $REPLY"

出力:

デフォルトでは、値を REPLY 変数に格納します

前の例では、2 行を使用して入力を取得しました。1つは prompt ステートメント用で、もう 1つは read コマンド用です。このプロセスは、read コマンドでフラグ -p を使用して 1 行で実行することもできます。

構文:

read -p <Prompt statement> <variable_name>

バッハスクリプトの例:

#!/bin/bash
read -p "Please enter the name of the file: " fileName
echo "The filename you entered is: $fileName"

出力:

read コマンドでフラグ -p を使用する

セキュリティとプライバシーの問題のために、画面からユーザー入力を非表示にする必要がある場合があります。たとえば、入力としてパスワードを取得する必要がある場合、ユーザーがパスワードを入力している間は画面に表示されないようにする必要があります。

それを実現するために、フラグ -s を使用してサイレントにします。

Bash スクリプトの例:

#!/bin/bash
read -p "Enter username: " userName
read -sp "Enter Password: " pass
echo
echo "Hello $userName"

出力:

フラグ -s を使用して、パスワード入力を画面に表示しないようにします

-a フラグを使用して配列に入力することもできます。このフラグを使用すると、行内のすべての単語が、後でアクセスできる配列のさまざまなインデックスに格納されます。

Bash スクリプトの例:

#!/bin/bash
echo "Enter names of 2 students: "
read -a stuNames
echo "The names of students are:${stuNames[0]}, ${stuNames[1]} "

出力:

-a フラグを使用して配列にユーザー入力を取得します

バッシュファイル入力

Bash スクリプトは、ファイルから入力を受け取ることもできます。read コマンドはこの目的で使用され、ファイルを 1 行ずつ読み取ります。ファイルからデータを読み取るためのいくつかの例について説明します。

スクリプトだけでなく、コンソールを使用してファイルから読み取ることができます。まず、コンソールコマンドを確認してから、スクリプトに移ります。

次のようなテキストを含むファイル data.txt があるとします。

LG
Samsung
Bosch
Pel

このファイルを読み取るコマンド:

while read ln; do echo $ln; done < data.txt

出力:

BASH で.txt ファイルを読み取る

スクリプトを使用してファイルから読み取ることもできます。

Bash スクリプトの例:

#!/bin/bash
fname='data.txt'
a=1
while read ln; do
echo "Reading line $a : $ln"
a=$((a+1))
done < $fname

出力:

スクリプトを使用してファイルから読み取る

コマンドラインからファイル名を読み取ることもできます。bash ファイルを作成し、その中に以下のスクリプトを配置します。

ファイル名は、このスクリプトによって入力されたコマンドラインから取得されます。読み取り用のファイル名を保持する変数 $1 は、最初の引数値を読み取ります。

ファイルが現在の場所に存在する場合、while ループは、前の例と同様に、ファイルを 1 行ずつ読み取り、内容を出力します。

Bash スクリプトの例:

#!/bin/bash
fname=$1
while read ln; do
echo $ln
done < $fname

このスクリプトを実行するには、次のコマンドを使用します。

指示:

$ bash myscript.sh data.txt

出力:

コマンドラインからファイル名を読み取る

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

関連記事 - Bash Input