Bash简介 & Bash是如何处理命令的

作者: OldChicken_ | 来源:发表于2018-11-03 13:30 被阅读6次

什么是shell

简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。打个比方,如果把计算机硬件比作一个人的躯体,而系统内核则是人的大脑,至于shell,把它比作人的五官似乎更加贴切些。回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。

Bash

Unix中有两种主要的shell类别:

  1. Bourne shell − If you are using a Bourne-type shell, the $ character is the default prompt.
  2. C shell − If you are using a C-type shell, the % character is the default prompt.

linux的发布版本之一——Redhat/CentOS——系统默认安装的shell叫做bash,即Bourne Again Shell,它是sh(Bourne Shell)的增强版本。Bourn Shell 是最早行起来的一个shell,创始人叫Steven Bourne,为了纪念他所以叫做Bourn Shell,检称sh。那么这个bash有什么特点呢?

  1. 记录命令历史
    我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。
  2. 指令和文件名补全
    按tab键,它可以帮你补全一个指令,也可以帮你补全一个路径或者一个文件名。连续按两次tab键,系统则会把所有的指令或者文件名都列出来。
  3. 别名
    前面也出现过alias的介绍,这个就是bash所特有的功能之一了。我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令。
    4 . 通配符
    在bash下,可以使用*来匹配零个或多个字符,而用?匹配一个字符。
  4. 输入输出从定向
    输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>。
  5. 管道符
    前面已经提过过管道符”|”,就是把前面的命令运行的结果丢给后面的命令。
  6. 作业控制。
    当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)。

Bash如何解析命令

  1. 按行读取命令

  2. 处理引用问题
    双引号内的字符将失去其原有意义,除了$, "\
    单引号内的字符将失去其原有意义,包括$, "\

  3. 将输入的一行字符串按照 ; 分割成多个命令。

  4. 处理特殊字符
    {..}, <(..), < ..., <<< .., .. | ..等特殊字符会被按照特殊的执行次序处理。
    重定向符号会被从命令行中移除,所以在执行命令时... > log, 2>&1这些命令都是不会提交给内核处理命令的进程的。
    其他符号会被其对应的结果表达所替代,如{..}命令:

$ echo {a..c}
a b c
  1. 变量替换
    将带 $ 符号的变量 $parameter替换成变量内容, 术语叫Parameter Expansion.
$ echo $PWD
/z/ros
  1. 将命令行分割成被执行命令和参数
    分割的原则是任何空白(空格、Tab)都将作为分隔符将一整条命令分割成一个一个的词。分割后结果的第一个词作为命令,其他词作为参数。如果命令词中包含空白,需要用引号括起来。
$ My Command /foo/bar   ## This will execute the command named 'My' because it is the first word.
$ "My Command" /foo/bar ## This will execute the command named 'My Command' because the space inside the quotes has lost its special meaning allowing it to split words.
  1. 执行命令
    a. 如果命令是 function or builtin,该命令将会被接收命令的同一个Bash process处理。
    b. 否则 (像是 hadoop fs 等命令), Bash 将会 fork off,创造一个新的Bash子进程,将解析好的命令传递给它,并等待它返回结果。一般情况下,子进程将会继承父进程的标准流

Ref:

  1. 学习 shell 脚本之前的基础知识
  2. The Bash Parser

相关文章

  • Bash简介 & Bash是如何处理命令的

    什么是shell 简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell...

  • Linux文本处理

    文本统计 字符处理命令 bash

  • 拥抱命令行

    由于我是windows操作系统,所以我用git bash来写命令。bash是一个命令处理器,用户可以在上面直接输入...

  • Day-2初识linux

    1.bash shell 是什么? bash shell 是一个命令解释器,用户输入命令之后,通过bash she...

  • Bash里面$@和$*的区别

    Bash里面$@和$*的区别 $@和 $*通常在bash处理命令行参数的时候使用。 相同点 大部分场景下他们是相同...

  • mac alias

    设置命令别名➜ vim ~/.bash_profile➜ ~ source ~/.bash_profile

  • shell 命令之 批量改文件名

    shell 命令之 批量改文件名 1. 如何写 shell 开头写#!/bin/bash,表示你的脚本由bash ...

  • CentOS 安装Tab命令补全增强软件包

    简介 默认情况下,tab键补全只能搜索主命令、补全当前文档名字。bash下bash-completion包则提供了...

  • bash如何修改命令行参数

    bash如何修改命令行参数 背景是这样的,假设有一个bash脚本接受用户参数,然后做环境检查,然后调用一个子命令,...

  • shell & bash基础命令及巧用

    shell与bash脚本的区别shell是Linux基础命令解释器bash(Bourne Again shell)...

网友评论

    本文标题:Bash简介 & Bash是如何处理命令的

    本文链接:https://www.haomeiwen.com/subject/ncekxqtx.html