美好的一天。
在工作中我有一个脚本,它接收一个数字作为参数,它向我显示一些与该数字相关的信息作为输出。
有些时候我会收到一个庞大的数字列表,并且在白天多次执行此脚本需要花费我很多时间。
我想知道是否有办法将所有这些数字保存在文件中,并指示所述文件的每一行都由脚本执行。
让我们说我的文件包含以下数字:
999999999
888888888
777777777
666666666
555555555
,脚本执行如下:
sh script.sh 55(Number) go
提前致谢。
答案 0 :(得分:2)
假设您的输入位于input.txt
,则会执行简单的while read
循环:
while read -r line <&3; do
sh script.sh "55${line}" go
done 3<input.txt
有关此技术的讨论,请参阅BashFAQ #1。
一些注意事项:
sh script.sh
实际上是非常糟糕的形式:它忽略了该脚本中的shebang行,因此它不能再指定自己的解释器。在使脚本可执行后运行./script.sh
要好得多;这样,如果它有#!/usr/bin/env bash
或#!/usr/bin/ksh
或任何其他将被尊重的shebang,那么你不会冒着导致你的脚本失败的风险,因为它是为一个POSIX sh解释器运行它更有能力的shell语言。3<input.txt
将输入文件放在描述符3上,而不是使用stdin的默认<input.txt
重定向;使用备用文件描述符编号可确保您的脚本可以从用户读取(从标准输入提示),如果需要的话。答案 1 :(得分:1)
实现这一目标的一种方法是使用xargs
,例如:
xargs -I{} sh script.sh 55{} go < numbers.txt
这假定您将数字放在名为numbers.txt
的文件中。
对于文件中的每一行,{}
中的sh script.sh 55{} go
将替换为该行中的值。
例如:
xargs -I{} echo number is: {} < input
鉴于您的样本输入,上面将产生:
number is: 999999999 number is: 888888888 number is: 777777777 number is: 666666666 number is: 555555555