python小工具格式化shell脚本(.sh文件)

格式化shell脚本

python开发小工具格式化shell脚本(.sh文件)

## 问题

开发环境为 win7, 测试环境和生产环境均为linux,经常出现这样的问题:
在开发环境下写的shell脚本文件,发布到测试环境和生产环境,就会出现兼容问题,无法运行。

分析

对比运行正常的shell脚本.sh文件,发现在win和linux下脚本文件的差异在于:
shell文件换行符为:0x0A 不能含有 0x0D

而在windows的编辑工具中,总是会把换行符保存为 “0D 0A”。
搞清楚原因后就容易解决了,只要把文件中的换行:"0D"全部删除即可。

不兼容的文件截图: 含有"0D 0A"
不兼容文件
经过处理后的文件: 不含 “0D”

处理后的文件

工具

用python开发一个小工具,用于批量对shell文件进行处理:

python shellfmt.py -fname=文件名或者目录

发布到 pypi

本工具已经发布到PYPI,直接安装即可使用。

安装:

pip install shellfmt 

使用示例:

shellfmt --fname=F:\project\shell_format\test

正在处理:F:\project\shell_format\test\start_new_tecclass_nnsvr.sh...done!
正在处理:F:\project\shell_format\test\start_new_tecclass_nnsvr_dev.sh...done!
正在处理:F:\project\shell_format\test\start_pseg_svr.sh...done!
all done!
<think>嗯,用户想知道如何用shell脚本运行Python文件。首先,我需要回忆一下相关的知识。根据之前看到的引用,比如引用[1]和引用[3],用户需要创建一个.sh文件,里面写上执行Python脚本的命令。那基本步骤应该是先创建.sh文件,然后添加执行权限,再运行它。 让我整理一下步骤。第一步是创建.sh文件,比如run.sh。然后在文件里写#!/bin/bash开头,接着是python命令加上脚本名和可能的参数。比如python hello.py,或者带参数的话用$1、$2这些变量。记得保存文件后,用chmod +x run.sh给执行权限,然后通过./run.sh来运行。 另外,用户可能还需要传递参数给Python脚本,这时候在.sh文件里用$1、$2来获取位置参数,然后传递给Python。引用[1]里提到过这个例子,所以应该正确。还有,如果用户有多个Python脚本或者需要处理多个文件,可能需要批量处理,这时候可以结合循环或者使用工具如引用[2]提到的格式化工具,不过这可能超出当前问题的范围。 可能用户会遇到权限问题,比如没有给.sh文件执行权限,所以需要提醒他们用chmod命令。另外,路径问题也很重要,如果Python文件不在当前目录,可能需要写绝对路径或者相对路径。比如,如果脚本在子目录scripts里,可能需要调整路径,像引用[4]提到的,在scripts目录下执行脚本的话,可能需要用python ../main.py这样的路径。 另外,有没有其他需要注意的地方?比如Python的环境问题。如果用户使用虚拟环境,可能需要在.sh文件里先激活虚拟环境,再执行脚本。比如加上source venv/bin/activate,然后再执行python命令。不过这可能属于进阶内容,用户如果没有提到的话,可能不需要深入,但可以作为优化方法提到。 总结下来,步骤应该是:创建.sh文件,编写内容,赋予权限,运行。同时可以扩展参数传递、路径处理、虚拟环境等注意事项。检查引用中的信息是否准确,比如引用[3]的例子是否正确,是的,他们确实在test.sh里写了python main.py,所以没问题。 最后,用户可能需要相关问题,比如如何传递参数、如何批量处理、如何处理环境问题。需要生成几个相关问题,比如参数传递、权限问题、虚拟环境的使用等。</think>### 如何通过 .sh 文件运行 Python 脚本? 通过 `.sh` 文件运行 Python 脚本是一种自动化执行任务的常见方法,步骤如下: --- #### **1. 创建 .sh 文件** 新建一个文本文件(例如 `run.sh`),内容式如下: ```bash #!/bin/bash python /路径/你的脚本.py ``` - `#!/bin/bash` 是脚本shebang 行,指定使用 Bash 解释器[^3]。 - `python` 命令后需填写 Python 文件的 **绝对路径** 或 **相对路径**(如 `./scripts/main.py`)。 --- #### **2. 添加执行权限** 通过 `chmod` 命令赋予脚本执行权限: ```bash chmod +x run.sh ``` 若未添加权限,直接运行会报错 `Permission denied`[^3]。 --- #### **3. 运行脚本** 在终端中执行: ```bash ./run.sh ``` 或通过绝对路径运行: ```bash /path/to/run.sh ``` --- #### **扩展功能** 1. **传递参数** 在 `.sh` 文件中使用 `$1`, `$2` 等占位符接收参数并传递给 Python: ```bash #!/bin/bash python hello.py "$1" "$2" ``` 运行时输入 `./run.sh 参数1 参数2`,Python 可通过 `sys.argv` 获取参数[^1]。 2. **多命令组合** 可结合其他 Linux 命令(如文件操作、环境配置): ```bash #!/bin/bash cd /项目路径/ source venv/bin/activate # 激活虚拟环境 python main.py > output.log 2>&1 ``` 3. **批量处理** 若需批量运行多个 Python 脚本,可使用循环: ```bash #!/bin/bash for file in *.py; do python "$file" done ``` --- #### **常见问题** - **路径错误**:确保 `.sh` 文件Python 脚本的路径匹配,或使用绝对路径。 - **环境依赖**:若 Python 依赖虚拟环境,需在 `.sh` 文件中激活环境[^4]。 - **脚本格式化**:复杂脚本可使用工具(如 `shellfmt.py`)规范式[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值