質問
私は宿題のためのいくつかのプログラムをコンパイルして実行する.SHファイルを書きました。私は、スクリプト内のループ「のために」が、私は整数のみを使用しない限り、それは動作しませんしています:
#!/bin/bash
for (( i=10; i<=100000; i+=100))
do
./hw3_2_2 $i
done
変数$ iは、プログラムhw3_2_2ための入力である、と私は私が使用したい非整数値を持っています。どのようにできたI進数のリストでコードを実行するループスルー?
解決
私は5年間で、誰もちょうど範囲を生成するために作成したユーティリティを言及していないこと、それは驚くべき発見、しかし、その後、再び、それは2005年の周りにBSDから来て、そしておそらくそれは時にLinux上でも、一般的に利用できませんでした質問が行われました。
しかし、ここでは、それは、次のとおりです。
for i in $(seq 0 0.1 1)
または、(前置またはゼロを追加することによって)同じ幅を持つすべての番号を印刷するために、-w
を使用します。それはそれが問題を引き起こす場合は、「整数」として送信されている数字を防ぐことができます。
構文がseq [first [incr]] last
を1にデフォルト設定、及びfirst
はincr
がlast
より大きいか小さいかに応じて、1または-1のいずれかをデフォルトで、first
あります。他のパラメータについては、配列(1)をご覧ください。
他のヒント
あなたは小数を生成するためにawkのを使用することができます例えば手順はof0.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) } }'
最も簡単な方法は、ちょうどそれらをリストすることです。
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
$(<私の-numbers.txt)部分は、スクリプトのその場所に名前のファイルの内容を置換する効率的な方法(バッシュ)です。このため、外部cat
コマンドを使用する必要がないことを指摘してデニスウィリアムソンに感謝します。
ここでは別の方法です。あなたは、スクリプト内のデータを含めるためにここにドキュメントを使用することができます:
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
Iは、通常、第二の答えに従って「SEQ」を使用し、ちょうど精密ロバスト整数ループの観点から回答を得、次いで、floatに変換BC
#!/bin/bash
for i in {2..10..2} ; do
x=`echo "scale=2 ; ${i}/10" | bc`
echo $x
done
与えます:
0.2 0.4 0.6 0.8 1.0
bashは小数を行いません。どちらか、またはより完全なプログラミング言語に移動することができますbc
ようなものを使用。 精度の問題に注意してくださいしかしします。