ファイルからプログラムへの入力リダイレクト

ファイルからプログラムへの入力リダイレクト

ファイルから入力を読み取ることができるプログラムを作成しようとしました。私のプログラムは次のとおりです

#!/bin/bash
num=$(($1 + $2))
echo $num

私の入力テスト:

1
1

使った

./prog < test1.in

ただし、エラーメッセージが表示されます。/prog
:ライン2:+:構文エラー:オペランドが必要です(エラーは「+」と表示されます)。

何が問題なの?ありがとうございます!

答え1

ファイルから入力を読み取るプログラムを作成する代わりに、次の形式で入力を受け取るプログラムを作成します。位置パラメータ(別名コマンドラインパラメータ)リダイレクト演算子は、<ファイルデータをプログラムの標準入力ストリーム(別名stdin) - プログラムはこれを無視します。

最も簡単に標準入力から値ごとに1行を読み取るには、プログラムを次のように変更できます。

#!/bin/bash
read a
read b
num=$((a+b))
echo $num

これでテストファイルからリダイレクトした場合、stdin結果は次のようになります。

$ ./newprog < test1.in
2

あるいは、このxargsユーティリティを使用してファイルデータを読み取り、その内容をプログラムに引数として渡すこともできます。

$ xargs -a test1.in ./prog
2

答え2

あなたが書いたプログラム:

#!/bin/bash
num=$(($1 + $2))
echo "$num"

$1推定合計値$2(位置パラメータ)は、プログラム(スクリプト)のパラメータリストに提供されます。
このようなプログラムが機能するには、次のように呼び出す必要があります。

$ ./prog 3 5 
8

各パラメータ$1とを$2呼び出しコマンドラインに配置します。


ファイルから入力を読み取るプログラムが必要な場合は、readを使用する必要があります。

#!/bin/bash
read var1
read var2
num=$((var1 + var2))
echo "$num"

これにより、次のように呼び出すことができます。

$ ./newprog < test1.in
2

関連情報