# Shell 与脚本
## 常见的 Shell
### sh/bash
### csh
### fish, zsh, ksh
## 条件与循环
### **for** … in …; do …; done
### **if** …; then …; fi;
### **seq**: 产生数字序列,常与 for 语句结合使用
### **test**: 提供多种条件检查功能
– 也可以用 [] 语句代替
### 遇到空格怎么办?
– 使用引号
– 对于 test,可以用 [[ 代替
– 同时 [[ 也提供了其他更为方便的语法
## 通配符
### 常见通配符
– *
– ?
– {a,b,c}
### 通配符如果匹配到了多条内容,可以与 for 语句一起使用
## 特殊变量
### “$1” … “$9”: 执行脚本时的命令行参数
### “$0”: 脚本自身的文件名
### “$#”: 命令行参数的数量
### “$$”: 当前 shell 的进程 ID
### “$?”: 上个命令的返回值
### “$_”: 上个命令的最后一个参数
### “~”, “.”, “..”: 用户目录、当前目录、上一级目录
## 命令输入历史
### “!”: 引用历史命令
### “^”: 替换上一条命令中的内容,并重新执行
– 示例:先执行 touch a.txt,再执行 ^txt^log,就会创建 a.log 文件
### fc: 编辑上一条命令并执行
## 环境变量 PATH
### **which**: 查看环境变量中的程序位于哪个路径
### **type:** 显示命令类型,也能定位程序的位置,同时支持 alias
## 组合多个程序
### 基础知识:标准输入输出
– STDIN
– STDOUT
– STDERR
### “|”: 管道
– 通过 (a; b) | tac 的形式依次运行两个程序,并把 STDOUT 传给第三个程序
### “>”: 输入输出重定向
– “>”: 重定向 STDOUT
– “2>”: 重定向 STDERR
– “<”: 重定向 STDIN - “>>” 等更多用法
– “b <(a)”: 运行 a,将 a 的输出保存为临时文件,并把文件露肩传给 b ### xargs: 将 STDIN 转换为后续命令的参数,常与管道结合使用 ### tee: 在通过管道传递数据时,同时将数据发送到 STDOUT ## 程序的后台运行 ### “&”: 在后台运行进程 ### jobs: 查看通过 “&” 后台运行的进程 ### fg: 将后台程序恢复前台执行 ### Ctrl-Z + bg: 使当前前台程序转移到后台执行 ### disown 和 nohup: 当前 Shell 退出后,程序能继续在后台运行 ### “$!”: 最后一个后台进程的 PID ### 管理所有前台、后台进程 - ps - pgrep - kill ## 命令行参数 (flags) ### 常见、通用的参数 - -a 所有文件 - -f 强制执行 - -h 简要帮助 - -v 显示详细输出 - -V 显示版本信息 ### “--”: 表示参数部分已经结束(e.g. 使用 touch -- -v 创建名字为 “-v” 的文件) ## Shebang: 脚本文件中 #! 开头的一行字符串,用于指示用哪个程序处理脚本 ## 快捷键 ### Ctrl-A, Ctrl-E: 移动光标到行首行尾 - 在 macOS 中,这也是一个全局快捷键,不仅仅能在 bash 中使用 ### Ctrl-R: 搜索命令历史(逆向) ### Ctrl-L: 清屏 ### Ctrl-C: 中止当前命令 (SIGTERM) ### Ctrl-\: 中止当前命令 (SIGKILL) ### Ctrl-D: 结束输入,产生 EOF ### Ctrl-U: 删除光标到行首输入的内容 ### Ctrl-Y: 粘贴上一次删除的内容 ## 获取帮助 ### 通过 man 查看手册 ### 指定 -h 或 --help 参数来显示帮助信息
留言