判断操作系统类型 适配所有操作系统的脚本

时间:2024-03-10 15:25:05

在编写跨所有操作系统(包括Unix/Linux、macOS和Windows)的Shell脚本时,需要根据不同的环境使用相应的命令来判断操作系统的类型。以下是一个尽量覆盖多种环境的示例:

 

bash

# 判断Linux或macOS
if [ "$(uname)" == "Linux" ]; then
    echo "This is a Linux system."
    # 进一步判断Linux发行版(如Ubuntu、Debian等)
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        echo "Distribution: $NAME"
        # 根据具体的ID执行相应命令...
    fi
elif [ "$(uname)" == "Darwin" ]; then
    echo "This is a macOS system."
fi

# 判断Windows(WSL环境下可用)
if grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null; then
    echo "This is a Windows environment (running in WSL)."
    # 在WSL下可以通过wsl.exe工具获取更详细的信息
    wsl --version
else
    # 如果是在传统CMD或PowerShell中运行批处理文件
    if exist "%SystemRoot%\system32\cmd.exe" (
        echo "This is a Windows system (non-WSL)."
        ver | findstr /R "^.*[0-9]\.[0-9]\.[0-9].*$"
    )
fi

注意:在传统的非WSL Windows环境中,上述脚本可能无法直接运行,因为Windows不支持bash shell的标准命令。针对这种情况,你需要编写一个批处理脚本来检测Windows版本或其他信息。

此外,对于一些特殊环境(如Cygwin),也可以通过类似的方法进行检测,但具体实现会有所不同。由于不同环境下可用的命令和方法差异较大,实际编写跨平台脚本时应充分考虑这些差异,并适配各种情况下的命令或工具。