${v:-w} # v 不为空, 返回 $v, 否则, 返回 w
${v:=w} # v 不为空, 返回 $v, 否则, 令 v=w, 返回 w
${v:+w} # v 不为空, 返回 w, 否则, 返回空
${v:?w} # v 不为空, 返回 $v, 否则, 输出 w, 退出
${#val} # 输出字符串的长度
${val:起始位置:长度} # 获取子串
lyb=123
lyb=$lyb+123 # 字符串连接, lyb 将变成 123+123
lyb=123.456.txt
lyb=${lyb%.*} # 后缀非贪婪匹配, lyb 为 123.456
lyb=${lyb%%.*} # 后缀 贪婪匹配, lyb 为 123
lyb=${lyb#*.} # 前缀非贪婪匹配, lyb 为 456.txt
lyb=${lyb##*.} # 前缀 贪婪匹配, lyb 为 txt
lyb=${lyb/*./str} # 全文 贪婪匹配, lyb 为 strtxt, 匹配一次
lyb=${lyb//*./str} # 全文 贪婪匹配, lyb 为 strtxt, 匹配多次
lyb=${lyb^^} # 变为大写
lyb=${lyb,,} # 变为小写
## 括号 -- 只列举常用的情况
* 使用 [[ ... ]] 测试
* [[ -z "$lyb" ]] # 判断是否空字符串
* [[ -n "$lyb" ]] # 判断是否不是空字符串
* [[ ! -n "$lyb" ]] # 非操作
* [[ "111" =~ 1{1,3} ]] # 右侧使用 扩展的正则表达式匹配
* [[ "111" == 1* ]] # 右侧使用 通配符
* cat <(ls) # 将命令或函数的输出作为文件
函数内建议使用 local 局部变量, 声明和使用放到不同的行
## 常用命令
!! # 上一条命令
!l # 执行最近使用的以 l 打头的命令
!l:p # 输出最近使用的以 l 打头的命令
!num # 执行历史命令列表的第 num 条命令
!$ # 上一条命令的最后一个参数
!* # 上一条命令的所有参数
^1^2 # 将前一条命令中的 1 变成 2
read name # 读取, 如果参数值小于字段数, 多余的值放入最后一个字段
## 常用快捷键
Ctrl+A # 将光标移到行首
Ctrl+B # 将光标向左移动一个字符
Ctrl+C # 向前台进程组发送 SIGINT, 默认终止进程
Ctrl+D # 删除光标前的字符 或 产生 EOF 或 退出终端
Ctrl+E # 将光标移到行尾
Ctrl+F # 将光标向右移动一个字符
Ctrl+G # 响铃
Ctrl+H # 删除光标前的一个字符
Ctrl+I # 相当于TAB
Ctrl+J # 相当于回车
Ctrl+K # 删除光标处到行尾的字符
Ctrl+L # 清屏
Ctrl+M # 相当于回车
Ctrl+N # 查看历史命令中的下一条命令
Ctrl+O # 类似回车,但是会显示下一行历史
Ctrl+P # 查看历史命令中的上一条命令
Ctrl+Q # 解锁终端
Ctrl+R # 历史命令反向搜索, 使用 Ctrl+G 退出搜索
Ctrl+S # 锁定终端 -- TODO 历史命令正向搜索, 使用 Ctrl+G 退出搜索
Ctrl+T # 交换前后两个字符
Ctrl+U # 删除光标处到行首的字符
Ctrl+V # 输入控制字符
Ctrl+W # 删除光标左边的一个单词
Ctrl+X # TODO-列出可能的补全 ?
Ctrl+Y # 粘贴被删除的字符
Ctrl+Z # 前台运行的程序 --> 后台暂停
Ctrl+/ # 撤销之前的操作
Ctrl+\ # 产生 SIGQUIT, 默认杀死进程, 并生成 core 文件
Ctrl+xx # 光标和行首来回切换
Esc+B # 移动到当前单词的开头(左边)
Esc+F # 移动到当前单词的结尾(右边)
Esc+. # 获取上一条命令的最后的部分
Alt+B # 向后(左边)移动一个单词
Alt+C # 光标处字符转为大写
Alt+D # 删除光标后(右边)一个单词
Alt+F # 向前(右边)移动一个单词
Alt+L # 光标处到行尾转为小写
Alt+R # 取消变更
Alt+T # 交换光标两侧的单词
Alt+U # 光标处到行尾转为大写
Alt+BACKSPACE # 删除光标前面一个单词,类似 Ctrl+W,但不影响剪贴板
Alt+. # 使用上条命令的最后一个单词
dd if=/dev/zero bs=1M count=1000 | nc 127.0.0.1 9999 # 测速-客户端
iconv -f gbk -t utf-8 1.txt -o 1.txt
uptime -s # 列出系统启动时间
tcpdump -nn -i any host 127.0.0.1 and port 9999 -w 1.pcap
passwd -stdin # 修改 root 密码, 从标准输入读取
ntpdate -s time-b.nist.gov # 使用时间服务器更新时间