如何运行shell脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何运行shell脚本相关的知识,希望对你有一定的参考价值。

编写好的shell脚本(如:test),可以采取两种方式进行运行:\x0d\x0a一、 $ sh test\x0d\x0a一般不采用这种调用方式,尤其不采用“sh<test”的调用方式,因为这种方式将禁止shell读取标准输入。\x0d\x0a也可以采用 $ ksh test\x0d\x0a这种方式要求shell具有“可读”的访问权限。\x0d\x0a二、直接运行可执行的shell脚本之前,首先应使用下列chmod命令,把shell脚本文件设置为可执行的文件。\x0d\x0achmod 755 test(除文件属主可写之外,每个用户均具有读和可执行的访问权限)\x0d\x0achmod +rx test(同上)\x0d\x0achmod u+rx test(只有文件属主具有读和执行的访问权限)\x0d\x0a按照上述要求设置shell脚本文件的访问权限后,可采用下列方式,直接运行shell脚本了。\x0d\x0a1、test(如果命令检索路径包含当前目录)\x0d\x0a2、./test(如果命令减缩路径不包含当前目录)\x0d\x0a*说明: sh test 方式调用一个shell叫蹦可能会禁止某些shell特定的扩展功能,因而可能引起脚本无法正确执行。 参考技术A 编写好的shell脚本(如:test),可以采取两种方式进行运行:一、 $ sh test一般不采用这种调用方式,尤其不采用“sh<test”的调用方式,因为这种方式将禁止shell读取标准输入。也可以采用 $ ksh test这种方式要求shell具有“可读”的访问权限。二、直接运行可执行的shell脚本之前,首先应使用下列chmod命令,把shell脚本文件设置为可执行的文件。chmod 755 test(除文件属主可写之外,每个用户均具有读和可执行的访问权限)chmod +rx test(同上)chmod u+rx test(只有文件属主具有读和执行的访问权限)按照上述要求设置shell脚本文件的访问权限后,可采用下列方式,直接运行shell脚本了。1、test(如果命令检索路径包含当前目录)2、./test(如果命令减缩路径不包含当前目录)*说明: sh test 方式调用一个shell叫蹦可能会禁止某些shell特定的扩展功能,因而可能引起脚本无法正确执行。本回答被提问者和网友采纳 参考技术B (1)修改文件的权限 chmod 755 文件名(755表示rwxr_xr_x)r表示读权限、w表示写权限、x表示执行权限
(2)./文件名 ./表示执行

如何从一个脚本运行多个 Python/Shell 脚本

【中文标题】如何从一个脚本运行多个 Python/Shell 脚本【英文标题】:How to run multiple Python/Shell scripts from one script 【发布时间】:2020-10-08 10:31:54 【问题描述】:

我有 4 个 python 和 shell 脚本,我想从一个 python 脚本一个接一个地运行它们。

那么让我们说:

import script1
import script2
import script3


python script1.py &
#do something here to check if script1 has been completed and move to script 2
python script2.py &
#do something here to check if script2 has been completed and move to script 3
python script3.py &
#do something here to check if script3 has been completed and move to script 4 which is a shell script.

有人可以帮忙吗?提前致谢!

【问题讨论】:

他们定义了main 函数吗?他们有if __name == 'main': 子句吗? 不,那些脚本没有这个子句。 所以import 应该让它们运行(它确实只是执行脚本......) docs.python.org/3/library/… 是这样的吗? 尝试养成将 shebang 作为脚本第一行的习惯,以便读者和内核知道您正在为哪个解释器编写代码,这样您就不必继续输入 python script.py一直都是。 【参考方案1】:

我会这样做:

#!/usr/bin/env python

import subprocess

subprocess.run(['python', 'script1.py'])
subprocess.run(['python', 'script2.py'])
subprocess.run(['python', 'script3.py'])

如果您只希望在前一个脚本成功的情况下运行每个脚本:

#!/usr/bin/env python

import subprocess

subprocess.run('python script1.py && python script2.py && python script3.py', shell=True)

我在这里使用shell=True,因为我依靠shell来解释&amp;&amp;,并且只有在前一个进程成功的情况下才让下一个进程运行。


如果您希望它们全部在后台并行运行:

#!/usr/bin/env python

import subprocess

subprocess.run('python script1.py &', shell=True)
subprocess.run('python script2.py &', shell=True)
subprocess.run('python script3.py &', shell=True)

我在这里使用shell=True,因为我依靠shell 来解释&amp;,这意味着我希望进程在后台运行,这样我就可以在它们运行时继续做其他事情。


一般来说,我根本不会使用 Python,我会写一个这样的bash 脚本:

#!/bin/bash

python script1.py
python script2.py
python script3.py

另外,一般来说,我会将 Python 脚本的第一行变成这样的 shebang:

#!/usr/bin/env python

print('I am a Python script with shebang')

然后我将使用以下命令使脚本可执行:

chmod +x script.py

现在,而不是运行它:

python script.py

内核知道要使用哪个解释器,所以我不必每次都告诉它,我可以简单地运行它:

script.py

如果它所在的目录在我的 PATH 上。或者,如果它不在我的 PATH 上,我需要:

/path/to/script.py

【讨论】:

【参考方案2】:

用例

如果您以后想添加更多脚本,建议您创建一个 run.py 文件,负责将参数(整数)传递给 shell 文件。

假设您喜欢运行 n(4) 个接受 1 参数的 shell 脚本或 python 脚本。

使用以下代码创建文件run.python

以下代码说明

instanceQty = 要运行的 shell 脚本数量 os.getcwd() = 当前文件的路径 mockScript.sh = shell 脚本 我与 run.py 放在同一目录中

运行shell脚本

# this is python file with name run.py
import subprocess,os
instanceQty = 4
for i in range(0, instanceQty):
    print(os.getcwd())
    subprocess.Popen(f"os.getcwd()/mockScript.sh i",shell=True,executable='/bin/bash')

运行python脚本

import subprocess,os,sys
instanceQty = 4
for i in range(0, instanceQty):
    print(os.getcwd())
    subprocess.Popen([sys.executable,f"os.getcwd()/mockScript.py",str(i)])
    

运行这个文件

python 运行.py

MacOS 权限问题

sudo chmod ug+x mockScript.sh

sudo chmod ug+x run.py

所有代码均在 Python 3.8.1 和 MacOs 12.0.1 环境下测试。

【讨论】:

以上是关于如何运行shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何写一个shell脚本在Linux下来运行main函数

当两者都在运行时,如何将消息从一个 shell 脚本发送到另一个 shell 脚本?

如何在windows下写shell脚本

Linux shell脚本如何自动运行程序并输入命令

Mac上如何运行shell脚本(变为可执行文件)

在ubuntu中如何安装shell 脚本程序