shell 基础概念
概念
- 终端:获取用户输入,展示运算结果的硬件设备
- tty teletypeWriter的简称和终端等价,早期指电传印机,在linux是输入/输出环境
- 终端模拟器:Mac Terminal、iTerm2等,关联虚拟tty的输入输出软件
- shell:处理来自终端模拟器的输入,解释执行之后输出结果给终端
- Bash:shell的一种具体实现
构成
shel 不仅提供了与内核和设备交的方法,还集成了一些今天软件开发中通用的设计模式(比管道和过器),具备控制流程,环,变量,命今查找的机制既是命今解释器,也是一门编程语言,作为命今解释器,它提供给用户接口,使用丰富的 GNU 工具集,第二方的或者内置的,比如 cd、pWd、exec、 test, netstat 等等
命令和语法
变量类型
- 自定义变量 作用域:当前shell 声明方式:= 规范 :字符串、整型、浮点型、日期型
- 环境变量 作用域:当前shell及其子shell 声明方式:export、declare-x
- 系统环境变量 作用域:所有shell 声明方式:启动加载
自定义变量:: 变量名=变量值 (等号左右不能有空格) page size=1 page num=2 #将命令复制给变量 1s=ls
将命令结果赋值给变量
file list=S(s -a)
默认字符串,不会进行 + 运算
total=page size*page_num
声明变量为整型
let total=page sizepage num declare -i total=page sizepage num #导出环境变量 export total declare -x total
管道
如果需要互通,比如第一个命令的返回传递给第一个命令,就需要用到管道了 管道的本质就是将多个程序进行了一个连接,和信号一样,也是进程通信的方式之。
- 管道与管道符|,作用是将前一个命令的结果传递给后面的命令
- 语法:cmd1 cmd2
- 要求: 管道右侧的命令必须能接受标准输入才行,比如 grep 命令,ls、mv等不能直接使用,可以使用 xargs 预处理注意: 管道命令仅仅处理 stdout,对于 stderr 会予以忽略,可以使用 set -o pipefail 设置 shell 遇到管道错误退出
总结
Shell是一种解释器,它负责处理从终端或脚本中输入的命令并执行它们。Shell常用于管理和自动化Unix、Linux等操作系统中的任务。
在Shell基础概念方面,终端是指获取用户输入和展示运算结果的硬件设备,tty是终端的一个简称;而终端模拟器则是Mac Terminal、iTerm2等关联虚拟tty的输入输出软件。Shell的主要作用是处理来自终端模拟器的输入,解释执行之后输出结果给终端,Bash则是Shell的一种实现。
Shell语言具有控制流程、环境变量、变量、命令解析、管道、重定向等基本概念。在命令和语法方面,变量类型包括自定义变量、环境变量和系统环境变量,分别对应着不同的作用域和声明方式。在管道方面,它可以将多个程序进行连接,通过管道符“|”将前一个命令的输出结果传递给后面的命令进行处理,前一个命令的标准输出作为后一个命令的标准输入。此外,在使用管道时需要注意管道右侧的命令必须能够接受标准输入才行,不能直接对一些命令进行处理,比如ls、mv等。同时,管道命令仅处理标准输出,对于标准错误则会忽略。可以使用set -o pipefail命令来设置Shell在遇到管道错误时退出。
综上所述,Shell是一个提供常用命令解析、环境变量、变量等基本概念的程序,它同时也具有强大的管道功能和重定向功能,这些功能使得Shell在管理和自动化Unix、Linux系统中变得易于使用和高效。