17

宿題のためにいくつかのプログラムをコンパイルして実行するために、.sh ファイルを作成しました。スクリプトに「for」ループがありますが、整数のみを使用しないと機能しません。

#!/bin/bash
for (( i=10; i<=100000; i+=100))
do
    ./hw3_2_2 $i
done

変数 $i はプログラム hw3_2_2 の入力であり、使用したい整数以外の値があります。10 進数のリストを使用してコードを実行するには、どうすればループできますか?

4

6 に答える 6

47

範囲を生成するためだけに作成されたユーティリティについて 5 年間誰も言及しなかったことは驚くべきことですが、2005 年頃に BSD に由来するものであり、おそらく質問が行われた時点では Linux で一般的に利用可能でさえありませんでした。 .

しかし、ここにあります:

for i in $(seq 0 0.1 1)

または、すべての数値を同じ幅で (先頭または末尾にゼロを追加して) 印刷するには、 を使用します-w。これにより、問題が発生する場合に、数値が「整数」として送信されるのを防ぐことができます。

構文はseq [first [incr]] lastで、既定値はfirst1で、既定値は より大きいか小さいincrかに応じて 1 または -1 になります。その他のパラメータについては、seq(1)を参照してください。lastfirst

于 2015-08-19T18:18:16.627 に答える
9

最も簡単な方法は、それらをリストすることです。

for a in 1.2 3.4 3.11 402.12 4.2 2342.40
do
  ./hw3_2_2 $a
done

リストが巨大でリテラルリストとして持つことができない場合は、ファイルにダンプしてから次のようなものを使用することを検討してください

for a in $(< my-numbers.txt)
do
  ./hw3_2_2 $a
done

$(< my-numbers.txt) 部分は、(Bash で) スクリプトのその場所にある名前ファイルの内容を置き換える効率的な方法です。catこれには外部コマンドを使用する必要がないことを指摘してくれた Dennis Williamson に感謝します。

于 2010-03-18T17:53:30.980 に答える
9

awk を使用して小数を生成できます。0.1

num=$(awk 'BEGIN{for(i=1;i<=10;i+=0.1)print i}')
for n in $num
do
  ./hw3_2_2 $n
done

または、完全にawkで実行できます

awk 'BEGIN{cmd="hw3_2_2";for(i=1;i<=10;i+=0.1){c=cmd" "i;system(cmd) } }'
于 2010-03-19T00:41:21.573 に答える
2

ここに別の方法があります。ヒア ドキュメントを使用して、スクリプトにデータを含めることができます。

read -r -d '' data <<EOF
1.1
2.12
3.14159
4
5.05
EOF

for i in "$data"
do
    ./hw3_2_2 "$i"
done

同様に:

array=(
1.1
2.12
3.14159
4
5.05
)

for i in "${array[@]}"
do
    ./hw3_2_2 "$i"
done
于 2010-03-18T18:07:02.803 に答える
0

bash は 10 進数を処理しません。そのようなものを使用するかbc、より完全なプログラミング言語に移行してください。ただし、精度の問題に注意してください。

于 2010-03-18T17:54:15.657 に答える