私はシェルスクリプトを持っており、Answers.txtファイルを介してスクリプトに答えを提供しました。
echo -n "Enter your name: "; read name
echo -n "Enter your number: "; read number
echo "Your name is $name and your number is $number"
回答.txt ファイル
Buvanesh
12345
私は以下を使ってこのスクリプトを実行します。script.sh < answers.txt
応答ファイルは動的であるため、ユーザーは応答ファイルに名前と番号を追加できます。
例えば
Buvanesh
12345
Kanna
45678
この場合、スクリプトを実行するには最初の2つの入力のみが必要です。シェルスクリプトのすべての入力を取得し、それに応じて出力を提供したいと思います。ループを実装する必要があるようですが、この場合はどのように実装するのか正確にはわかりません。誰でも助けることができますか?
答え1
while IFS= read -r name && IFS= read -r number; do
#IFS= read -r number || break
printf 'Your name is %s and your number is %d\n' "$name" "$number"
done < answers.txt
あなたの思考プロセスは正しいです。条件がANDで接続されたコマンドであるloop
ループを導入する必要があります。while
read
答え2
read
これ以上入力がないと、コマンドは失敗するため、ループ条件として使用できます。
#!/bin/sh
echo -n "Enter your name: "
while read name
do
echo -n "Enter your number: "
read number
echo "Your name is $name and your number is $number"
done
答え3
Schaller氏の答えは良いです。ファイルから入力をリダイレクトすることの欠点は、手動入力もループの影響を受けるため、ユーザーはループを終了するために値を指定するのではなくEnterキーを押す必要があることに注意する必要があります。現在のロジックを使用して手動で実行し、スクリプトに入力ファイル($ 1)(リダイレクトされていない)を提供するときは、次のことができます。
ファイルが常に "name\nnumber\n" 形式であると確信している場合は、次のことができます。
cntr=0
cat $1 | while read line
do
if [ $cntr -eq 0 ]
then
name=$line
cntr=1
elif [ $cntr -eq 1 ]
number=$line
echo "Your name is $name and your number is $number"
cntr=0
fi
done
すべての名前/番号の組み合わせを読むまで明細書が印刷されます。