如何在一个 sh 文件中运行不同的 bash sh 脚本?

如何在一个 sh 文件中运行不同的 bash sh 脚本?

我有 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 提供正确的选项或向脚本调用添加条件来实现这一点;如果您不知道该怎么做,我相信这里有人可以解释。

相关内容