执行方式
子进程执行
子 Shell 是由 Shell 或 Shell 脚本运行的子进程。当我们在 Shell 命令行提示符下,运行一个 Shell 脚本时,它会创建一个叫做子 Shell 的新进程,我们的脚本将会使用这个子 Shell 来运行
父进程执行
当你在 Shell 命令行提示符下,运行一个 Shell 脚本时,它会创建一个叫做子 Shell 的新进程,我们的脚本将会使用这个子 Shell 来运行。而当前的 Shell 进程就是父进程
配置文件读取
login shell
登录 Shell 是在登录交互式会话时执行的第一个进程。登录 Shell 从 /etc/profile 和主目录中的配置文件读取环境变量和其他配置。这允许进行标签补全、彩色输出并设置其他内容,例如 umask 等
non-login shell
非登录 Shell 是由登录 Shell 启动的。从另一个 Shell 或程序中启动的 Shell 是非登录 Shell。非登录 Shell 不用于登录系统,它执行以下脚本来设置 Shell 环境
命令执行机制
字符解析
Shell 字符解析是指在 Shell 脚本中对字符串进行解析操作。可以通过指定起始位置和截取长度来获取需要的子串。常用的字符串解析命令有 cut、sed、awk 等。在实际应用中,字符串解析常用于文件路径处理、字符串解析等场景。
shell展开
Shell 展开是指在 Shell 命令行中,执行前将每个参数解析成其真实表示的样子。这称为外壳展开。键入的命令参数通过 echo 命令的帮助在终端里显示其展开的样子
查找命令、执行
Shell 在执行命令前会先检查是否有 alias,如果有就会使用 alias 中的内容。如果 command 名字不包含 / ,shell 将尝试寻找它。如果存在同名的函数,则会调用函数。如果没有匹配到函数,则从 shell 内置命令(builtins)中寻找,如果找到则调用该命令。如果都没有找到则从 $PATH 中寻找,为了避免每次遍历 $PATH ,shell 维护了一张 HASH 表,记录了每个命令对应的绝对路径。如果寻找成功或者 command 中含有 / , shell 将在新环境中执行它(fork 一个新进程)。如果 command 不是异步启动的,shell 将等待其完成并收集退出状态码
字符串匹配机制
正则表达式
正则表达式 (regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。例如:runoo+b ,可以匹配 runoob、runooob、runoooooob 等, + 号代表前面的字符必须至少出现一次(1次或多次)。runoo*b ,可以匹配 runob、runoob、runoooooob 等, * 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。colou?r 可以匹配 color 或者 colour ,? 问号代表前面的字符最多只可以出现一次(0次或1次)
通配符
通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符
默认变量
参数个数:# 全部参数:@
判断命令
test [ [[
选择命令
if elif else if case in ) esae
循环
while [condition];do;done until[condition];do;done for in [list];do;done