在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。。Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
sh(Bourne Shell)是一个早期的重要shell,1978年由史蒂夫·伯恩编写,并同Version 7 Unix一起发布。
bash(Bourne-Again Shell)是一个为GNU计划编写的Unix shell。1987年由布莱恩·福克斯创造。主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。
含义:
#! 是一个特殊标记,说明这是一个可执行的脚本。除了第一行,其他以#开头的都不再生效,为注释。
#! 后面是脚本的解释器程序路径。这个程序可以是shell,程序语言或者其他通用程序,常用的是bash、sh。
#!/bin/bash
#!/bin/sh
cat /etc/shells
[root@iZhp33j6fklnmhbf0lz2obZ admin]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
cat /etc/passwd
[root@iZhp33j6fklnmhbf0lz2obZ admin]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
ll /bin/sh
ll /bin/bash
[root@iZhp33j6fklnmhbf0lz2obZ admin]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 Nov 9 2019 /bin/sh -> bash
[root@iZhp33j6fklnmhbf0lz2obZ admin]# ll /bin/bash
-rwxr-xr-x. 1 root root 1219248 Nov 9 2019 /bin/bash
sh 遵循POSIX规范:“当某行代码出错时,不继续往下解释”。bash 就算出错,也会继续向下执行。
sh 脚本:
#!/bin/sh
source err
echo "hello"
bash 脚本:
#!/bin/bash
source err
echo "hello2"
输出结果:
[root@iZhp33j6fklnmhbf0lz2obZ admin]# bash hello2.sh
hello2.sh: line 2: err: No such file or directory
hello2
[root@iZhp33j6fklnmhbf0lz2obZ admin]# sh hello.sh
hello.sh: line 2: source: err: file not found
[root@iZhp33j6fklnmhbf0lz2obZ admin]# bash --posix hello2.sh
hello2.sh: line 2: source: err: file not found
sh 跟bash的区别是bash是否开启POSIX模式。
sh是bash的一种特殊的模式,sh就是开启了POSIX标准的bash, /bin/sh 相当于 /bin/bash --posix。
在Linux系统上/bin/sh往往是指向/bin/bash的符号链接
ln -s /bin/bash /bin/sh
可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼(RMS)应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统接口)的缩写,而X则表明其对Unix API的传承。
当前的POSIX主要分为四个部分:Base Definitions、System Interfaces、Shell and Utilities和Rationale。
点赞 收藏 关注