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

什么是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下,可以使用*来匹配零个或多个字符,而用?匹配一个字符。
  5. 输入输出从定向
    输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>。
  6. 管道符
    前面已经提过过管道符”|”,就是把前面的命令运行的结果丢给后面的命令。
  7. 作业控制。
    当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)。

Bash如何解析命令

  1. 按行读取命令
  2. 处理引用问题
    双引号内的字符将失去其原有意义,除了$"\
    单引号内的字符将失去其原有意义,包括$"\
  3. 将输入的一行字符串按照 ; 分割成多个命令。
  4. 处理特殊字符
    {..}, <(..), < ..., <<< .., .. | ..等特殊字符会被按照特殊的执行次序处理。
    重定向符号会被从命令行中移除,所以在执行命令时... > log2>&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

原文地址:https://www.cnblogs.com/wwh/p/11610889.html

时间: 2024-11-12 12:31:27

Bash简介 & Bash是如何处理命令的的相关文章

bash简介以及bash应用和命令

bash及其特性: shell:外壳 GUI:Gnome,KDE,xfceCLI: sh,csh.ksh,bash,tcsh,zsh 程序:只有一个进程:可以有多个 进程:在每个进程看来,当前主机上只存在内核和当前进程.进程是程序的副本,进程是程序执行实例. 用户工作环境:bash:          #管理员          $一般用户 shell,子shell bash命令行编辑:光标跳转:   Ctrl+a:跳到命令行首   Ctrl+e:调到命令行尾   Ctrl+u:删除光标至命令行

2_Shell语言———bash简介

一.初识bash Bash是一种解释型语言,但它也提供了交互式接口,支持变量,因此提供了编程环境,所以可以称bash为程序语言. 解释型语言属于弱类型语言,其特点为: 1.它不强制区分变量类型,即无论存储什么数据,默认均以字符格式(ASCII码)存储. 2.不需要事先声明变量,需要时直接使用,直接赋值: 在弱类型语言中,定义变量通常为: [set] VAR_NAME=Value    //set可以省略 引用变量为: ${VAR_NAME}            //大多数情况下花括号可以省略

[Shell]Bash基本功能:多命令顺序执行与管道符

/*----------------------------------------------------------------------------------------------- @黑眼诗人 <www.chenwei.ws> -----------------------------------------------------------------------------------------------*/ 一. 多命令顺序执行 分号(;)        逻辑与(&a

Bash 中同名的内部命令和外部命令

昨天有个人在 bug-bash 上问:为什么 [ --help 没有输出帮助信息.有人回答他了,原因是 coreutils 提供的 [ 命令才接受 --help 选项,Bash 自己的 [ 命令不接受任何选项.当你在 Bash 里执行 [ --help 时,当然优先执行的是内部命令 [,而不是外部命令 [,执行 /usr/bin/[ --help(在我的 Mac 上是在 /bin/[)才能获得他想要的帮助信息. 其实除了 [,还有一些其它外部命令也会和 Bash 提供的内部命令同名,下面列举一下

bash的特性之多命令执行

一上午的时间学习了bash的特性之多命令执行,和对shell脚本编程的初步学习.bash的特性的多 命令执行的顺序执行结构就是把几个命令用分号隔开.而选择执行结构有与.或.非三种运算法则.shell脚本编程首先要知道什么叫编程?编程就是为了能够让用户在使用计算机的时候,以非交互的形式完成某些任务,我们需要将这些任务编制成一个文件,让计算机顺序读取,从而实现某些功能.编程语言分为高级语言和低级语言,其中高级语言可以根据不同的形式分为几种.shell脚本编程是指过程式的编程语言,解释运行,依赖于外部

Bash Shell 中的History命令

###  Bash Shell 中的History命令 ---------- 日常运维工作中,我们经常使用History命令去检查在这台机器上所执行的历史命令,或者谁在什么时间执行的什么命令.History命令默认情况下不显示时间,我们可以设置. ---------- - 显示所执行过的命令 简单敲下键盘,输入一个单词:history即可.或者his +table键bash自动补全命令,终端会显示行号及对应的命令. > [[email protected] ~]$ history 1  exit

shell,bash,git bash,xshell,ssh

一:shell是linux/unix系统的外壳,也可以理解为命令行接口,就是你输入并执行命令行的地方.bash(born again shell)是shell的一种,最常用的shell之一.你在你的linux上运行: ps | grep $$;如果运行结果为bash,就说明当前默认shell是bash. Shell基本上是一个命令解释器,类似于DOS下的command.它接收用户命令(如ls等),然后调用相应的应用程序.较为通用的shell有标准的Bourne shell (sh)和C shel

关于启动bash提示‘bash: export: `//这是新的&#39;: not a valid identifier’的解决办法

学习linux以来将centos改的也不少了,也不知道这个问题是由于那个修改来的.最近改bash的操作环境配置文件,用到了~/.bashrc这个文件,发现里面被我修改过. 那是当年安装fcitx输入法的时候曾经设置过个人环境变量如下 我当时是直接将这段粘贴到.bashrc这个文件中了,导致‘//这是新的’这个注释无效,网上的一般意见是由于windows与linux的文本格式不同 比如换行符 1.Linux的换行:    "n" 2.windows的换行: "rn"(

sed命令简介及在sed命令中使用变量的方法

1. Sed简介sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等.以下介绍的是Gnu版本的Sed 3.02.2. 定址可以通过定址来定位你所希望编辑的行,该地址用数字构成,用