Shell的理解 一、什么是Shell 系统有哪些Shell1. 查看自己默认用的Shell我们登录Linux终端时自动运行的shell写在 /etc/passwd 文件里第7段就是默认shell。# 查看自己用户的配置cat /etc/passwd | grep 你的用户名示例输出zhangzy:x:1165:1165:,,,:/home/zhangzy:/bin/bash末尾 /bin/bash 代表我默认使用bash。2. Linux里常见的Shell系统所有shell程序都放在 /bin 文件夹执行这条命令查看全部ls -lF /bin/*sh常用shell简单介绍1. bash最常用我们上课全程用这个2. dash轻量小shell系统开机脚本用它3. zsh、csh拓展功能更强的shell可选使用4. sh不是独立程序是dash的快捷链接3. 切换不同shell想临时体验dash直接输入程序名想退出回到原来窗口输入exit/bin/dash # 进入dashexit # 退出dash返回bash二、父Shell和子Shell本节课重点1. 基础概念父Shell打开终端、登录系统自动弹出的第一个bash窗口最顶层shell。子Shell在父shell里输入bash、用括号包命令、后台运行程序时系统新建的一层shell。2. 实操创建多层子shellbash # 创建第1层子shellbash # 创建第2层子shellps --forest # 查看进程树能看到层层嵌套的bashexit # 退出一层子shell回到上一层每输一次bash就多一层子shellexit一层一层往上退。3. 怎么判断当前是不是子shell系统自带变量 $BASH_SUBSHELL输出0 当前是父shell输出1/2 处于1层/2层子shell对比两种命令写法1. 分号 ; 执行不产生子shellpwd; ls; echo $BASH_SUBSHELL# 结果输出0所有命令在父shell运行cd会改变当前文件夹2. 括号 () 执行生成子shell(pwd; ls; echo $BASH_SUBSHELL)# 结果输出1cd只会在括号内生效不会影响外面终端4. 后台运行命令 jobs管理命令末尾加 程序放到后台跑不卡住终端sleep 60 # 后台休眠60秒jobs # 查看所有后台任务jobs -l # 查看后台任务进程编号5. 协程 coproc拓展内容coproc 会自动在后台开一个子shell运行程序语法有严格要求1. { 前后必须有空格2. 最后一条命令末尾加分号 ;3. ; 和 } 中间留空格# 默认名字协程coproc sleep 10# 自定义协程名称coproc MyJob { sleep 10; }jobs -l # 查看协程任务三、两种命令内建命令 和 外部命令1. 外部命令是独立存在的文件存放在 /bin、/usr/bin运行时会新建子进程速度慢。比如ps、ls都属于外部命令。which ps # 查看命令文件位置type -a ps2. 内建命令直接集成在bash内部没有单独文件运行不需要新建子进程速度更快。cd、exit、history、alias都是内置命令。type cd # 输出 cd is a shell builtintype exit3. 特殊命令既有内置、又有外部文件echo、pwd 同时有两种版本type -a echo# 输出两行# echo is a shell builtin内置# echo is /bin/echo外部文件which echo # 只显示外部文件路径