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).
最简单的方法是列出它们:
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命令.
您可以使用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)