一、Overview

Linux 中的 shell (这里的shell指shell脚本解释器)有很多类型,其中最常用的几种是: Bourne shell (sh)、C shell (csh) 和 Korn shell (ksh), 各有优缺点。Bourne shell 是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用, 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。

Linux 操作系统缺省(系统默认的状态)的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bourne shell 完全向后兼容,并且在Bourne shell 的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多 C shell 和 Korn shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

简单来说,BASH是Shell的一种,是大多数LINUX发行版默认的SHELL,除BASH Shell外还有C Shell等其它类型的Shell。

二、shebang #!

  • 这个符号的名称,叫做”Shebang”或者”Sha-bang”。长期以来,Shebang都没有正式的中文名称。Linux中国翻译组的GOLinux将其翻译为“释伴”,即“解释伴随行”的简称,同时又是Shebang的音译。

2.1 shebang的运行机制

  • Shebang通常出现在类Unix系统的脚本中第一行,作为前两个字符。在Shebang之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于指明执行这个脚本文件的解释器。
  • 在直接调用脚本时,系统的程序载入器会分析 Shebang 后的内容,将这些内容作为解释器指令,并调用该指令,将载有 Shebang 的文件路径作为该解释器的参数,执行脚本,从而使得脚本文件的调用方式与普通的可执行文件类似。例如,以指令#!/bin/sh开头的文件,在执行时会实际调用 /bin/sh 程序(通常是 Bourne shell 或兼容的 shell,例如 bash、dash 等)来执行。

2.2 参考链接

上述运行机制参考

三、( #!/bin/bash ) 和 ( #!/usr/bin/env bash )

!!!首先要明确shell是什么?
shell是一种解释型语言,因此需要解释器进行执行,而标题这两种语句就是指定寻找解释器路径的语句(个人理解,有错留言)。!!!
Shell脚本解释器,用来解析shell语言,就是一个命令行解释器。(BASH是Shell-Script解释器的一种,是大多数LINUX发行版默认的SHELL,除BASH Shell外还有C Shell等其它类型的Shell。)

3.1 #!/bin/bash

#!/bin/bash
#This is a very simple example
echo Hello World

这样最简单的一个 BASH 程序就编写完了;有几点需要注明:
(1)开头一行必须为:#!/bin/bash(只有这样程序才能识别这是一个bash脚本)
#! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据 “#!” 及该字串后面的信息确定该文件的类型。在BASH中第一行的 “#!” 及后面的 “/bin/bash” 就表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash解释器来解释执行。BASH 这个程序一般是存放在 /bin 目录下,如果你 的 Linux 系统比较特别,bash也有可能被存放在其他地方。

(2)第二行的 “# This is a …” 是 BASH 程序的注释。

(3)第三行的 echo 语句的功能是把 echo 后面的字符串输出到标准输出中去。由于 echo 后跟的是 “Hello World” 这个字符串,因此 "Hello World"这个字串就被显示在控制台终端的屏幕上了。需要注意的是 BASH 中的绝大多数语句结尾处都没有分号。

3.2 #!/usr/bin/env bash

#!/bin/bash

的运行机制大体一致,不同的是去哪里找bash解释器。简单来说就是

  • #!/bin/bash 是直接指定了应该去哪里找 bash
  • #!/usr/bin/env bash 则是告诉系统去 $PATH 包含的目录中挨个去找吧,先找到哪个,就用哪个。

两个语句的详细区别

3.3 两种执行方式

  • 第一种是显式制定 BASH 去执行:
      bash hello 或sh hello (这里 sh 是指向 bash 的一个链接,“lrwxrwxrwx 1 root root 4 Aug 20 05:41 /bin/sh -> bash”)
  • 第二种可以先将 hello 文件改为可以执行的文件,然后直接运行它。

    此时由于 hello 文件第一行的 “#! /bin/bash” 的作用,系统会自动用/bin/bash 程序去解释执行 hello 文件的:

    chmodu+xhello./hello

此处没有直接 “$ hello”是因为当前目录不是当前用户可执行文件的默认目录,而将当前目录“.”设为默认目录是一个不安全的设置。

注:第二种执行方式,要确认脚本为可执行模式(此类方法自己不常用,理解不深,如有错误欢迎指出,后续用到会加深理解,纠正博客)。
bash和shell简介

Bash和shell的关系相关推荐

  1. shell脚本:sh、bash、dash的关系

    一.释义 #!/bin/bash指定脚本使用/bins/bash来解释执行,#!/bin/sh是指定此脚本使用/bin/sh来解释执行. #!是特殊的表示符,后面是脚本解释器程序路径,脚本的内容是由对 ...

  2. Bash和shell

    一.相关概念 1.什么是shell,什么是bash? 管理计算机硬件的其实是内核,用户正是通过shell来跟内核通信的,从本质上说shell是一个能执行各种命令的宏处理器.而bash(/bin/bas ...

  3. bash 与 shell脚本编写指南

    bash 与 shell脚本编写指南 bash 与 shell脚本编写指南 bash基本命令 man与info命令 遍历目录命令 文件与目录列表命令 处理文件相关命令 处理目录命令 查看文件内容 通过 ...

  4. 终端、控制台、虚拟终端、伪终端的概念,阐述终端与shell的关系

    1.终端就是处理计算机主机输入输出的一套设备,它用来显示主机运算的输出,并且接受主机要求的输入,典型的终端包括显示器键盘套件,打印机打字机套件等. 终端又分为:本地终端.用串口连接的远程终端.用TCP ...

  5. bash反弹shell编码

    python -c 'import pty;pty.spawn("/bin/bash")' base64 编码 用bash反弹shell的时候,由于Runtime.getRunti ...

  6. shell脚本系列:1、shell、bash和shell脚本

    shell脚本系列:1.shell.bash和shell脚本 文章目录 shell脚本系列:1.shell.bash和shell脚本 1. 前言 2. shell.Bash.shell script简 ...

  7. linux超级基础系列——什么是shell? bash和shell有什么关系

    什么是Shell?        shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序.你在提示符下输入的每个命令都由shell先解释然后传给Linux内核.    ...

  8. Linux shell 学习笔记(3)— shell 父子关系及内建命令

    1. shell 类型 只要用户登录到某个虚拟控制台终端或是在 GUI 中启动终端仿真器,默认的 shell 程序就会开始运行. 默认的交互 shell 会在用户登录某个虚拟控制台终端或在 GUI 中 ...

  9. Linux编程 9 (shell类型,shell父子关系,子shell用法)

    一. shell类型 1.1  交互式 bin/ shell程序 当用户登录到某个虚拟控制台终端或是在GUI中启动终端仿真器时,默认的shell程序就会开始运行.系统启动什么样的shell程序取决于你 ...

最新文章

  1. json yeid_【分享】自动格式化输出JSON的小插件分享给大家
  2. 超过一半的受访者表示愿意升级到Windows 11
  3. C#委托、事件学习之(一)——委托事件描述
  4. 实体词典 情感词典_tidytextpy包 | 对三体进行情感分析
  5. 为什么CAP不能同时满足的简单理解
  6. 理论 | 优雅的构建一个健壮的API接口
  7. 树状数组萌新讲解+基础习题【一点一滴】
  8. 【SpringBoot】Spring boot 测试类 找到不到MySQL 驱动
  9. vue 手机号正则表达式
  10. ImageAI 学习
  11. 明星的html模板,明星个人网页制作模板
  12. 上门洗车APP --- Android客户端开发 之 项目结构介绍,大厂面试必备技能
  13. 对 COMP 通证经济模型的一般性评价
  14. MY1690-12P语音模块实现特定的语音提示功能
  15. 陀螺财经研究院郭润华:2019年将迎来区块链真正成熟的井喷时代
  16. VMware12安装Windows7(二)-ghost win7
  17. 《人工智能实践:Tensorflow笔记》听课笔记22_6.1输入手写数字图片输出识别结果
  18. 2021牛年大吉,红包敬上
  19. CSS绘制气泡对话框样式(有边框)
  20. 2021.5.13 易协同访客数据

热门文章

  1. thinkpad T450 20BVA01MCD拆机换内存条的经验分享
  2. JUC并发编程面试题突击复习
  3. 2013年计算机网络原理,全国2013年4月自学考试计算机网络原理试题
  4. 张奕卉|可信区块链溯源:因为透明,所以可信
  5. 算法记录 牛客网 leetcode刷题记录
  6. 【Fink专题】基于Flink1.12的一些知识点分享-第二篇
  7. MBD-有感(Hall)BLDC闭环控制模型
  8. [灵性] 人工智能与灵性修炼
  9. 高效工作——表格巧应用——表格制图(文字版)
  10. iPhone 9/9 Plus发布时间曝光!