Linux Shell 批量运行语句


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)