关闭

Linux循环执行程序体验

标签: shell实例
139人阅读 评论(0) 收藏 举报
分类:

实例

如题所示,下面为大家展示的是可用于执行的有效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循环吧。

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:139次
    • 积分:11
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行