shell用法总结10

114 阅读2分钟

引言

  • 该系列为个人经常需要将项目代码工程化,所以需要用到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 ****

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