Linux循环执行程序体验

原创 2015年11月18日 11:50:36

实例

如题所示,下面为大家展示的是可用于执行的有效shell实例:

for line in `ls ../datas | grep -o "[0-9]*"`
do
        sed -i "10c variable\t\tfilename equal $line" inputfile
        mpiexec -n $NPROCS LAMMPS -in inputfile
done

其主要目的是为使用LAMMPS软件处理一批data文件,流程如下:
1、获取datas文件夹下的所有文件名中的数字;
2、修改LAMMPS的输入脚本,执行LAMMPS程序,并循环执行该步骤至处理完所有文件。

有人发现,所有代码片都是从网上搜得,那本博客还有什么意义呢?先别急,慢慢来。

运行平台

RHEL 6.3
mpiexec: mpich2
LAMMPS: 一个经典的大规模并行模拟软件,它很复杂,还需要一个输入脚本,知道这就行了

P.S.
1、grep 的 -o 选项表示只显示匹配内容(搜了很多关于grep的介绍,里面没有),不信你可以试试:

$grep --help
Output control:
  -o, --only-matching       show only the part of a line matching PATTERN

2、代码中的 “单引号”—— ` 符号,是键盘左上角esc键下面的那个~

重点——为什么要用开头的那段代码

原因:找了很多,就它能顺利执行。
那么不能顺利执行的循环代码有哪些呢:

ls ../datas | grep -o "[0-9]*" > tmp.name
while read line
do
        sed -i "10c variable\t\tfilename equal $line" inputfile
        mpiexec -n $NPROCS LAMMPS -in inputfile
done < tmp.name

或者

ls ../datas | grep -o "[0-9]*" > tmp.name
cat tmp.name | while read line
do
        sed -i "10c variable\t\tfilename equal $line" inputfile
        mpiexec -n $NPROCS LAMMPS -in inputfile
done

其实他们差不多,因为这两个都是while循环。至于不能顺利循环的原因,我并不知道,但是我知道,执行的结果是:LAMMPS程序只执行了一次,然后循环就终止了。

相信也有人看过类似的while循环,它们可以顺利执行,比如:

ls ../datas | grep -o "[0-9]*" > tmp.name
while read line
do
        echo $line
        line2line=`expr $line + 1`
        echo $line2line
done < tmp.name

这段代码与上面的代码唯一的区别是没有调用任何其他的程序,仅仅是做了个加法。
讨论到此结束,因为我知道仅仅是网上搜到的内容,然后尝试了一下而已。

结论

想要在循环中使用复杂的程序,还是用for循环吧。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Linux 可执行程序打压缩

对于设计嵌入式Linux系统的研发人员来说,有一个问题是必须要考虑到的,那就是存储器的空间。我们知道嵌入式Linux系统所用的存储器不是软磁盘、硬盘、ZIP盘、CD-ROM、DVD这些众所周知的大容量...

linux可执行程序如何在系统后台运行

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开...

Linux 装载可执行程序过程的分析

内容说明 本次的内容,是一次 MOOC 课程的作业。具体的,是使用汇编对 Linux 系统调用部分进行模拟实现,从而更加直观的验证 Linux 系统的基本机制。 作业声明 qianyizhou...

【已解决】可执行程序无法在Linux上运行,显示line 1: syntax error: word unexpected (expecting ")

今天遇到一件比较奇怪的事情,在主机上使用交叉编译器来生成开发板的可执行文件。编译时没有报错, 但是下载到开发板上的时候,执行的时候却报错了。而且报语法错误。真是生平之罕见啊。最后在网上 找...

linux 编译选项中加入-shared 造成执行程序coredump

之前leader分了我个coredump的bug,从客户给的

Linux进程的创建与可执行程序的加载

// 研究僧时上实验课的作业,忘了内容有木有啥用了,从另一个账号搬过来的,感觉还有点意思,留着吧就 实验内容: 1.参考进程初探 编程实现fork(创建一个进程实体) -> e...

Linux环境编程之进程(四):创建新进程、执行程序和进程终止

引言: 对于每个进程,都有一个非负整数表示的唯一进程ID。虽然进程的ID是唯一的,但却是可重用的。系统中有一些专用的进程。如ID为0的进程通常是调度进程,也成交换进程或系统进程(它是内核进程)。进程...

可执行程序无法在Linux上运行,显示line 1: syntax error: word unexpected (expecting ")

【已解决】可执行程序无法在Linux上运行,显示line 1: syntax error: word unexpected (expecting ")")【问题】用arm-linux-gcc编译出来的...

Linux命令执行程序shell

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)