背景
有时候需要编写windows上的批处理文件,来代替命令行手动执行程序,虽然语法很简单,但是也需要一点时间来查找,编写,测试。由于用得不多,过一段时间有需要再用起来又忘了,只好再学一遍。也包括在linux上写shell脚本。这里介绍一个案例,批量执行多个python文件,只需要执行一次这个脚本,便自动完成所有测试。
任务
在目录./operators下有a.py,b.py,c.py,d.py等多个python文件,现在需要写一个脚本,分别在windows和linux下执行如下语句,即所有的python文件都将被执行两次(pr是脚本*.py内需要用的参数)
python ./operators/a.py
python ./operators/a.py pr
python ./operators/b.py
python ./operators/b.py pr
...
所用到的语法
用到的语法包括变量定义,循环遍历,字符串连接,自增变量等。这里贴出这个任务的bat脚本和shell脚本,对应来理解。test.bat文件如下
@echo off
set Path=./operators
set OpsList=a;^
b;c;d;e;f;^
g;h
setlocal enabledelayedexpansion
set /a cnt=1
set python=d:\python36\python.exe
for %%i in (%OpsList%) do (
echo "测试第!cnt!个算子文件"
%python% %Path%/%%i.py
%python% %Path%/%%i.py pr
set /a cnt+=1
)
同样功能的test.sh文件
Path=./operators/
OpsList=(a \
b c d e f \
g h)
cnt=1
for i in ${OpsList[*]};
do
echo "测试第${cnt}个算子文件"
python ${Path}${i}.py
python ${Path}${i}.py pr
let cnt++
done
有几个注意事项
- 变量赋值 = 前后不能有空格
- 引用变量,windows的格式为前后百分号%var%,shell的格式为$var
- 长字符串连接,window的bat用^,shell用反斜杠\
- windows的格式,自增变量起作用需要setlocal enabledelayedexpansion这句
- 字符串和变量的连接没有 + ,写到一起就行