Linux如何编写shell自动多次执行一个第三方程序并传入参数?

任务是批量处理数据!
但是这些数据是在不同文件下的,
也就是在用第三方软件处理的时候,要将不同文件的文件名传递给该软件。
所以,如果每次运行该软件的时候,手动输入文件名是很费时费力的。
请问,如何编写类似于Windows中批处理的程序来解决该问题?
应该是用SHELL?
比如该软件执行方式为: DDD 文件名.其中DDD是该软件名。
请哪位大哥给个代码啊?
谢谢谢谢!

第1个回答  2018-01-05
首先这个不叫批处理 叫shell脚本 其次我还是不理解会有人在这种地方问Linux的问题 感觉很山寨
整个互联网难道除了百度知道就没有地方可以问问题了吗?

你描述这个问题不是很清楚 为什么非要把参数放到一个文件里面 不理解

我写一个bash脚本吧 如果你用的是正常的发行版直接贴到命令行执行就可以了 1000是执行次数

for i in {1..1000}; do echo apple$i > ./w.tcl; ns ./w.tcl >> ./apple; done

不要追问我 追问了我也不会答的 分我也不在乎 你自己留着吧
第2个回答  2011-06-24
用临时文件tmpfile保存这个变量值即可。
执行脚本时先判断该文件是否存在:
若存在则从该文件里读出上一次的值;
若不存在,初始化sum为0。
加1后再写入文件中去。

if [ -e tmpfile ]; then
sum=`cat tmpfile`
else
sum=0
fi

sum=`expr $sum+1`
echo $sum >tmpfile
第3个回答  2011-06-24
问题补充:是每执行一次就加一,如第一次执行的如果是1,第二次执行的结果用临时文件tmpfile保存这个变量值即可。执行脚本时先判断该文件是否存在: 若
第4个回答  2011-06-24
假设所有文件都在同一个目录下。

#!/bin/bash
cd 目录名
for $filename in `ls`
do
DDD $filename
done追问

没法运行啊!?
我用 ls -l 得到 -rwxr-xr-x 1 gf gf 83 2011-06-25 10:10 Dialign.sh
但是用 sudo ./Dialign.sh 却没有任何反应!?
其中 Dialign.sh 文件如下:
#!/bin/bash

cd fasta

for $filename in `ls`

do

dialign2-2 $filename

done
ls fasta 后得到的结果如下:
gf@ubuntu:~$ ls fasta
BB11001.tfa BB11003.tfa BB11005.tfa BB11006.tfa
shell文件能不能设置断点?

追答

不能设断点,但可以用 sudo bash -x ./Dialign.sh 这种方式在执行过程中打印出执行的每一条语句及结果,用于调试。
改一下,`ls`可能会新开一个shell来执行,所以路径可能有变化,改成`ls fasta`。然后在 for 循环里面加 echo $filename 语句来打印文件名。
#!/bin/bash
for $fiiename in `ls fasta`
do
echo $filename
dialign2-2 $filename
done
如果文件名都正确打印了,那么就是运行dialign2-2的问题了。你再试试看,fasta目录下能不能直接运行 dialign2-2 这个软件。

追问

应该是for fiiename in `ls` 呵呵...谢谢了

本回答被提问者采纳
第5个回答  2011-06-24
软件
相似回答