思维导图:Hacker Tools Shell 与脚本章节

# 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 参数来显示帮助信息

最后修改日期: 2019-02-17

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。