引言
- 该系列为个人经常需要将项目代码工程化,所以需要用到shell脚本,前段时间的每日一题沸点活动虽然写了不少,但是因为要满足活动要求,所以很多函数等语法无法介绍完全,该文将介绍一个函数具体详细一些的用法
正文 关于shell中的bash执行与sh执行的区别(下)
查看
# 查看系统可使用的shell类型
cat /etc/shells
- 如下图所示
# 查看当前默认设置,一般在第一行:
cat /etc/passwd
# 查看当前sh状态
ll /bin/sh
# 查看当前bash状态
ll /bin/bash
sh和bash执行的区别
- sh 遵循POSIX规范:“当某行代码出错时,不继续往下解释”。bash 就算出错,也会继续向下执行。
- 这就是上篇介绍使用RANDOM函数报错的原因:
sh: arithmetic expression: expecting primary ****
- 这就是上篇介绍使用RANDOM函数报错的原因:
POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX )。POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统上编译执行。
- 例如下面例子
sh 脚本:
#!/bin/sh
source err
echo "test sh"
结果为:
testsh.sh: 2: testsh.sh: source: not found
bash 脚本:
#!/bin/bash
source err
echo "test sh"
结果为:
testsh.sh: 2: testsh.sh: source: not found
test sh
总结
-
总的来说,sh 跟bash的区别,实际上是bash有没开启POSIX模式的区别,个人觉得,使用bash执行可能更少遇到错误,比如RANDOM函数如果不是执行报错了还没发现原来sh不行
-
简单说,sh是bash的一种特殊的模式,sh就是开启了POSIX标准的bash, /bin/sh 相当于 /bin/bash --posix。
-
在Linux系统上/bin/sh往往是指向/bin/bash的符号链接
ln -s /bin/bash /bin/sh