• 【Linux】Shell使用sh和bash区别


    Shell简介

    在计算机科学中,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
    
    • 1
    • 2

    查看

    查看系统可使用的shell类型

    cat /etc/shells    
    
    • 1
    [root@iZhp33j6fklnmhbf0lz2obZ admin]#  cat /etc/shells
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查看当前默认设置,一般在第一行

    cat /etc/passwd    
    
    • 1
    [root@iZhp33j6fklnmhbf0lz2obZ admin]# cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    
    • 1
    • 2

    查看当前sh状态

    ll /bin/sh   
    
    • 1

    查看当前bash状态

    ll /bin/bash  
    
    • 1
    [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
    
    • 1
    • 2
    • 3
    • 4

    sh与bash区别:

    sh 遵循POSIX规范:“当某行代码出错时,不继续往下解释”。bash 就算出错,也会继续向下执行。

    sh 脚本:

    #!/bin/sh
    source err
    echo "hello"
    
    • 1
    • 2
    • 3

    bash 脚本:

    #!/bin/bash
    source err
    echo "hello2"
    
    • 1
    • 2
    • 3

    输出结果:

    [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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    小结

    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
    
    • 1

    小拓展

    POSIX

    可移植操作系统接口(英语: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。

    在这里插入图片描述
    点赞 收藏 关注

  • 相关阅读:
    防火墙双机热备
    京东面试:MQ 消息丢失、重复、积压问题,如何解决?
    16.1 Socket 端口扫描技术
    分享Web端即时通讯的发展与WebSocket的实践
    【蓝桥杯】蓝桥杯双周赛第二场E题
    冥想第五百二十三天
    Java 插入公式到PPT幻灯片
    http-only原理与防御XSS实践
    ArcGIS标注的各种用法和示例
    [Linux]动静态库
  • 原文地址:https://blog.csdn.net/qq_35764295/article/details/126381076