0 基础
Shell本质上就是将多个命令放于*.sh文件中批量运行。
如:新建一个test.sh文件,输入如下几条命令并保存(第一条命令利用同目录下makefile文件编译C++程序,第二条命令删除编译产生的中间文件*.o,第三至五条命令分别以参数1、2、3运行名为xxx的C++程序)
make
rm -rf *.o
./xxx 1
./xxx 2
./xxx 3
在命令行中运行:
sh test.sh
即等效于在命令行中按顺序执行上述五条命令,完成C++程序编译、中间文件清除与三次程序运行,且当上一条指令完成后才会执行下一条指令。
跑实验时常用for循环语句,下文列出了常见的几种sh文件写法举例,更完整的可参考https://www.cnblogs.com/EasonJim/p/8315939.html
,
1 变换参数运行同个程序
1.1 按顺序运行
当希望以不同参数运行名为xxx的C++程序,若.sh文件中包含的命令如下:
./xxx 1
./xxx 2
./xxx 3
则可等价于:
for ((i=1;i<=3;i++));
do
./xxx $i ;
done
若参数非连续,如2、5、100,则可以写作:
for i in 2 5 100;
do
./xxx $i ;
done
1.2 并行运行
一般而言,同个程序可以按不同参数并行运行,互不干扰。下方的例子通过添加"&"符号,可以同时以参数1、2、3并行地运行程序:
for ((i=1;i<=3;i++)); do
{
./xxx $i ;
}&
done
2 遍历文件夹中所有输入文件
2.1 按顺序运行
如程序需要遍历datasets文件夹下的所有数据集文件,可以写作:
for filename in datasets/*; do
{
./xxx $filename;
}
done
2.2 并行运行
类似地,也可以并行处理datasets文件夹下的所有数据集文件,如:
for filename in datasets/*; do
{
./xxx $filename;
}&
done
3 防止程序意外终止
由于实验时程序有可能需要大量时间才能跑出结果,有可能因为网络问题或者连接工具关闭导致的服务器连接中断,进而导致实验中断。因此可以采用screen工具让实验程序在后台运行,即便中断与远程服务器的连接后,程序仍然保持运行。
具体可参考https://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html
本文介绍了如何使用Linux Shell批量运行语句,包括变换参数运行同一个程序、遍历文件夹中所有输入文件以及防止程序意外终止的方法。通过编写.sh文件,可以实现命令的顺序执行和并行运行,例如按顺序或并行运行C++程序,并遍历文件夹中的文件。为了确保长时间运行的程序不因网络问题中断,推荐使用screen工具。
33万+

被折叠的 条评论
为什么被折叠?



