Shell脚本和编程 | 青训营笔记

90 阅读2分钟

Shell基础概念

终端 tty 终端模拟器 Shell Bash

终端是获取用户输入、展示运算结果的硬件设备。

ttyteletypeWriter的简称、和终端等价,早期之电传印机,在linux中是输入/输出环境

终端模拟器是 Mac Terminal、iTerm2等,关联虚拟tty的输入输出软件。

shell 是command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端。

Bash 是shell的一种具体实现。

Shell 语法和命令

变量类型

自定义变量

系统环境变量

**注:**如果修改了系统配置,不会立即生效,需要我们重启终端或者执行source命令。

配置文件加载

运算符和引用

管道

管道和管道符 | , 作用是将前一个命令的结果传递给后面的命令。

cmd1 | cmd2

管道右侧的命令必须能接受标准输入才行,比如grep命令,ls,mv等不能直接使用,可以使用xargs预处理。

重定向

输出重定向符号
> : 覆盖写入文件
>> : 追加写入文件
2> : 错误输出写入文件
&> : 正确和错误输出同一写入到文件中
输入重定向符号
< 
<<

判断命令

Shell中提供了test、[、[[ 三种判断符号,可用于

  • 整数测试
  • 字符串测试
  • 文件测试

语法:

test condition 
[ condition ]
[[ condition ]]

分支语句

语法1

if condition ; then 
 程序段
elif condition ; then 
 程序段
else 
 程序段
fi

语法2

case $变量 in:
	"第一个变量内容")
	程序段
	;;
	"第一个变量内容")
	程序段
	;;
	*)
	程序段
	;;
esac

循环

while condition ; do 程序段 ; done 
until condition ; do 程序段 ; done
for var in [words...]; do 程序段; done

函数

funcName(){echo "abc";}
function funcName() {echo "abc";}

模块化

source [函数库的路径]

常用命令

执行

在第一行指定命令解释器

启动方式

./filename.sh
bash ./filename.sh
source ./filename.sh

执行过程

1、字符解析

  • 识别换行符、分号(;),做行的分割
  • 识别命令连接符(|| && 管道)做命令的分割
  • 识别空格、tap符号,做命令和参数的分割

2、shell展开

3、重定向

4、执行命令

  • builtin直接执行
  • builtin使用$PATH查找,然后启动子进程执行

5、收集状态并返回

Shell展开

大括号展开

(brace Expansion) {...}

波浪号展开

参数展开

(Shell Parameter Expansion) ${}

命令替换(Command Substitution)

在子进程中执行命令,并用得到的结果替换包裹的内容,形式有两种: $(...) 或 ‘...'

文件名展开

课程总结

今天学习了Shell脚本编程,需要记忆的东西很多,下去要多多记忆练习,为后面学习打下好基础才是真正的学会。