1. Bash脚本判断操作系统
Bash脚本大揭秘:一键识别macOS、Windows还是Linux,让你的跨平台部署更轻松!

致读者: 点击上方 “雪之梦技术驿站” → 点击右上角“ ... ”→ 点选“设为星标 ★ ” 加上星标,就不会找不到我啦!
1.1. 引言
由于工作原因需要在mac和windos电脑之间随时切换,为了方便会写一些脚本解放重复性劳动.
类似于这样的上传文件命令就有很强的操作系统路径强相关性,需要区分到底是mac还是windows,从而决定不同的上传路径.
# mac
scp -r /Users/snowdreams1006/generator/* ali:~/generator
# windows
scp -r /g/generator/* ali:~/generator
因此,研究一下在bash环境中判断识别不同的操作系统,在这里分享一下.

1.2. 思路
1.2.1. 1. 检查 uname 命令
第一反应就是使用uname命令观察在不同操作系统的输出,下面测试了三款操作系统.
uname -s
# Linux
uname -s
# Darwin
uname -s
# MINGW64_NT-10.0-19045
如果是 windows10 原生终端环境power shell,是不支持uname命令的,会得到如下报错信息.

顺便科普一下uname的命令:

总结:
uname命令在Unix-like系统(包括macOS 和Linux`)上可用,但在原生 Windows 命令行中不可用。
通过检查 uname 的输出,可以区分 macOS 和其他 Unix-like 系统.
如果是目前的个人需求足矣判断出 mac 即可,其他情况就是 windows,也可以检查 windows 文件或者特殊的环境变量.
1.2.2. 2. 检查 Windows 特有的环境变量
在我的电脑-高级设置-环境变量-系统环境变量中可以看到很多键值对的环境变量,尽可能挑选出系统自带且特殊的名称.

实测下来只有Windows会有这些环境变量的值,其他操作系统输出为空,那么就可以判断特殊的环境变量识别出windows操作系统.

echo $WINDIR
# Linux 输出为空
echo $WINDIR
# Darwin 输出为空
echo $WINDIR
# Windows 输出 C:\Windows
echo $SYSTEMROOT
# Windows 输出 C:\Windows
除此之外还可以检查特定文件的存在性(比如macOS上的 /System/Library/CoreServices/SystemVersion.plist 或 Windows上的C:\Windows\System32\cmd.exe等等.
1.3. 实现
思路: 使用 uname -s 根据输出内容判断macOS还是Linux,然后再获取特定的环境变量的值来区分是否是Windows操作系统.
实现: 脚本如下,亲测有效.
if [ "$(uname -s)" == "Darwin" ]; then
echo "This is macOS."
elif [ "$(uname -s)" == "Linux" ]; then
echo "This is Linux."
elif [ -n "$WINDIR" ] || [ -n "$SYSTEMROOT" ]; then
echo "This is Windows."
else
echo "Unknown Unix-like system."
fi
1.4. 总结
值得注意的是Bash本质上是为Unix-like系统设计的,因此在原生 Windows 环境中直接区分操作系统可能需要一些额外的考虑,特别是如果你不是在使用WSL。
最后提供本人亲测好用的检测代码,可以简单识别出操作系统从而做出不同决策.

1.5. 往期精彩文章
- 终极防窥秘籍!禁用右键+F12,竟还拦不住好奇宝宝?揭秘防窥新境界!
- 网站反爬新招:一键封杀右键菜单,让你的网站数据稳如泰山,打造爆款防护秘籍!
- 男人的魅力密码:价值至上的情感攻略
- 每天一道美味佳肴《糖醋排骨》

1.6. 欢迎扫码关注

欢迎扫码关注,私信回复『加群』一起交流技术
作者: 雪之梦技术驿站
来源: 雪之梦技术驿站
本文原创发布于「雪之梦技术驿站」,转载请注明出处,谢谢合作!