📜  命令检查是 linux 还是 mac - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:23:00.301000             🧑  作者: Mango

命令检查是 linux 还是 mac - Shell-Bash

在编写 Shell 脚本时,常常需要区别处理 Linux 和 macOS 系统上的命令执行。本文将介绍如何通过 Shell 脚本判断当前执行环境是 Linux 还是 macOS。

系统变量

Linux 和 macOS 在系统变量上有所区别,可以通过以下变量进行判断:

  • Linux: lsb_release -si/etc/os-release
  • macOS: sw_vers -productNameuname -s

下面是代码实现:

#!/bin/bash

if [[ "$(uname)" == "Darwin" ]]; then
  echo "当前环境是 macOS"
elif [[ "$(expr substr $(uname -s) 1 5)" == "Linux" ]]; then
  if [ -f /etc/os-release ]; then
    echo "当前环境是 Linux"
    . /etc/os-release
    echo "Linux 发行版: $NAME"
  elif type -p lsb_release >/dev/null 2>&1; then
    echo "当前环境是 Linux"
    echo "Linux 发行版: $(lsb_release -si)"
  else
    echo "当前环境是 Linux,但无法确定发行版"
  fi
else
  echo "当前环境不是 Linux 也不是 macOS"
fi

以上代码首先判断 $(uname) 的返回值是否等于 Darwin,如果是则是 macOS 系统,否则判断$(uname -s) 字符串前5位是否等于 Linux,如果是,则是 Linux 系统。在 Linux 系统中,进一步根据 /etc/os-release 文件或 lsb_release 命令判断具体发行版。

参考资料