我有 7 个不同的 .sh 文件,每个文件都做不同的事情,主要是诊断设备。例如:FanPsu.sh 这是输出
FANs Status
FAN1A | 38h | ok | 29.96 | 11696 RPM
FAN1B | 39h | ok | 29.97 | 11868 RPM
FAN2A | 3Ah | ok | 29.98 | 11696 RPM
FAN2B | 3Bh | ok | 29.99 | 11954 RPM
FAN3A | 3Ch | ok | 29.100 | 11610 RPM
FAN3B | 3Dh | ok | 29.101 | 12040 RPM
FAN4A | 3Eh | ok | 29.102 | 11696 RPM
FAN4B | 3Fh | ok | 29.103 | 11954 RPM
PSUs Status
PSU Mismatch | 17h | ns | 144.96 | Disabled
Status | 52h | ok | 10.1 | Presence detected
Status | 53h | ok | 10.2 | Presence detected
PSU Redundancy | 18h | ok | 144.96 | Fully Redundant
Drives.sh ,这是输出
Check Drives Status
Slot Number : 0
Drive's position : DiskGroup 0
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 558.911 GB [0x45dd2fb0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : SEAGATE ST600MM0069 ST31WFJ0RVMG
Foreign State : None
Media Type : Hard Disk Device
Temperature : 39C (102.20 F)
S.M.A.R.T alert : No
Slot Number : 1
Drive's position : DiskGroup 0
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 558.911 GB [0x45dd2fb0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : SEAGATE ST600MM0069 ST31WFJ0R80Z
Foreign State : None
Media Type : Hard Disk Device
Temperature : 39C (102.20 F)
S.M.A.R.T alert : No
Slot Number : 2
Drive's position : DiskGroup 1
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 5.821 TB [0x2e93432b0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : SEAGATE XS6400LE70084 0001HSR032V2
Foreign State : None
Media Type : Solid State Device
Temperature : 42C (107.60 F)
S.M.A.R.T alert : No
Check Volumes Status
Name : Virtual Disk0
RAID Level : 1
State : Optimal
Number Of Drives : 2
Name : Virtual Disk1
RAID Level : 0
State : Optimal
Number Of Drives : 1
因此,我想一次运行一个 .sh 文件,按照我提供的顺序一个接一个地运行,所以最后它将运行每个脚本并提供其输出,就像是单个 .sh 文件一样。我不想一次运行每个 .sh 文件,我希望能够只运行一个 .sh 文件,并且它将执行所有 .sh 文件。
答案1
这没有什么棘手的。一个shell脚本可以执行其他shell脚本。假设您已使脚本可执行(chmod a+x FanPsu.sh
等),您可以执行以下操作:
#!/bin/bash
FanPsu.sh
Drives.sh
AnotherScript.sh
# etc.
或者,如果您还没有:
#!/bin/bash
bash FanPsu.sh
bash Drives.sh
bash AnotherScript.sh
# etc.
将其保存为另一个 shell 脚本(例如,AllScripts.sh
),使其可执行(chmod a+x AllScripts.sh
),然后运行它。
如今,让 shell 解释器的多个实例彼此运行的开销相当低,但如果您出于某种原因想要拥有单个实例,您可能也可以将脚本连接在一起,但可能不依赖于精确的内容,并且无论如何,它们可能更容易作为单独的文件进行维护。另一种选择是将每个脚本转换为 shell 函数,然后使用函数定义获取文件,然后调用函数。但确实没有必要。运行其他脚本的脚本完全没问题。
如果您想在任何脚本失败等情况下随时停止执行,可以通过为 shebang 提供正确的选项或向脚本调用添加条件来实现这一点;如果您不知道该怎么做,我相信这里有人可以解释。