此脚本对“testcase”文件夹下的每个案例目录运行模拟,执行“make run”,并监视所有模拟过程。每次模拟完成后,它将通知用户。
Source Code
1 |
|
脚本功能概述
这个脚本的主要作用是:
- 遍历
testcase
目录下所有以_case
结尾的文件夹。 - 进入每个文件夹,执行
make run
命令启动仿真,并将仿真日志输出到对应的日志文件。 - 记录每个仿真进程的进程号(PID)和对应的日志文件路径。
- 监控所有仿真进程,等待它们结束,结束后通知用户仿真已完成。
定义相关目录
testcase_dir="./testcase"
:定义了存放所有测试用例的目录路径。log_dir="./logs"
:定义了存放日志文件的目录,使用mkdir -p
命令确保如果该目录不存在,自动创建。pid_file="sim_processes.txt"
:定义了一个文件来记录所有仿真进程的 PID 和对应的日志文件路径。> $pid_file
:清空sim_processes.txt
文件,确保每次运行时都是从一个空的文件开始。
遍历 _case
结尾的文件夹并执行 make run
**
for case_dir in $testcase_dir/\*_case
**:循环遍历testcase
目录下所有以_case
结尾的文件夹。**
if [ -d "$case_dir" ]; then
**:检查每个目录是否存在。**
case_name=$(basename $case_dir)
**:获取当前目录的名称(去掉路径部分),以便作为日志文件名。**
log_file="$log_dir/$case_name.log"
**:为每个仿真任务创建一个日志文件,保存在logs
目录下,文件名为case_name.log
。**
cd $case_dir
**:进入当前的测试用例目录。**
make run -l $log_file &
**:在后台运行make run
命令,并将日志输出到对应的日志文件中。**
pid=$!
**:获取刚才后台运行进程的 PID。**
echo "$pid $log_file" >> "../$pid_file"
**:将进程号和日志文件路径记录到sim_processes.txt
文件中。**
cd - > /dev/null
**:返回上层目录,并将输出重定向到/dev/null
,避免显示冗余信息。
监控仿真进程并通知
**
while IFS=" " read -r pid log_file
**:从sim_processes.txt
文件中读取每一行数据,并将每行内容(PID 和日志文件路径)分配给pid
和log_file
变量。**
wait $pid
**:等待每个仿真进程(根据 PID)完成。wait
会阻塞脚本,直到指定的进程结束。**
echo "Simulation task completed, log file: $log_file"
**:仿真进程完成后,打印一条消息,告知仿真任务已经完成,并显示对应的日志文件路径。可选邮件通知:如果需要在仿真完成后发送邮件,可以在此处添加邮件发送的命令。示例代码被注释掉了,可以根据需要解开注释并修改邮件地址。
本文链接: https://talent-tudou.github.io/2024/12/30/Shell/Shell脚本-run_simulations/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!