Shell循环使用非整数?

mar*_*ary 14 bash scripting loops sh

我编写了一个.sh文件来编译并运行一些程序来完成作业.我在脚本中有一个"for"循环,但除非我只使用整数,否则它将无效:

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

变量$ i是程序hw3_2_2的输入,我有我想要使用的非整数值.我怎么能循环运行带有十进制数列表的代码?

Dan*_*ral 43

我发现令人惊讶的是,在五年内没有人提到过为生成范围而创建的实用程序,但是,它再次来自于2005年左右的BSD,也许它在问题出现时在Linux上通常都没有.

但这里是:

for i in $(seq 0 0.1 1)
Run Code Online (Sandbox Code Playgroud)

或者,要打印具有相同宽度的所有数字(通过前置或附加零),请使用-w.这有助于防止数字作为"整数"发送,如果这会导致问题.

语法是seq [first [incr]] last,first默认为1,incr默认为1或-1,具体取决于last是大于还是小于first.有关其他参数,请参见seq(1).


unw*_*ind 9

最简单的方法是列出它们:

for a in 1.2 3.4 3.11 402.12 4.2 2342.40
do
  ./hw3_2_2 $a
done
Run Code Online (Sandbox Code Playgroud)

如果列表很大,那么你不能将它作为文字列表,考虑将其转储到文件中然后使用类似的东西

for a in $(< my-numbers.txt)
do
  ./hw3_2_2 $a
done
Run Code Online (Sandbox Code Playgroud)

$(<my-numbers.txt)部分是一种有效的方式(在Bash中),用于替换脚本位置中名称文件的内容.感谢Dennis Williamson指出不需要使用外部cat命令.

  • 无用的`猫`.在Bash中:`$(<file)`,在`sh`(和Bash)中:`读取a; 做......; 完成<文件` (2认同)

gho*_*g74 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
Run Code Online (Sandbox Code Playgroud)

或者你可以完全用awk完成

awk 'BEGIN{cmd="hw3_2_2";for(i=1;i<=10;i+=0.1){c=cmd" "i;system(cmd) } }'
Run Code Online (Sandbox Code Playgroud)