Bash Shell特性
shell变量
- 常用环境变量和bash变量
- $_ 上一条命令的最后一个参数
- $TERM 终端环境类型
- $SHELL shell类型
- $HISTSIZE 命令历史条目数
- $USER 用户名
- $MAIL 邮箱路径
- $PATH 命令搜索路径
- $PWD 当前目录
- $LANG 语言和编码
- $HOME 家目录
- $HOSTNAME 主机名
- $HOSTTYPE 硬件架构
- $HISTFILE 命令历史记录文件
- $$ bash的PID
- $? 上一个命令的状态码
- $PS1 命令提示符
- $PS2 多行命令提示符
- $RANDOM 随机生成一个0-32767的整数
特性和历史
- 命令输入快捷键
- [TAB] 命令/文件 补全
- [TAB][TAB] 列出所有 命令/文件 路径补全
- Ctrl+c 终止当前命令
- Ctrl+d 输入EOF(某些命令的退出符)
- Ctrl+z 将当前命令暂停并调入后台
- Ctrl+a 跳到命令行首
- Ctrl+e 跳到命令行尾
- Ctrl+u 删除光标至命令行首的内容
- Ctrl+k 删除光标至命令行尾的内容
- Ctrl+l 清屏(clear命令)
- Ctrl+s 暂停屏幕输出
- Ctrl+q 恢复屏幕输出
- 命令历史操作
- !string 执行命令历史中最近一个以指定字符串开头的命令
- !$(Esc+.) 上一条命令的最后一个参数
- !n 执行命令历史中的第n条命令
- !-n 执行命令历史中的倒数第n条命令
- !! 执行上一条命令
替换和别名
- 命令别名
- alias CMDALIAS=’CMD’ 设定命令别名
- ualias CMDALIAS 取消命令别名
- 命令结果替换
- ”” 双引号 弱引用 可以实现变量替换
- ” 单引号 强引用 不能实现变量替换
- 替换为命令结果的两种方式
- $(CMD)
- `COMMAND`
- {} 花括号同级展开
- ./t/{a,b,c} <=> ./t/a ./t/b ./t/c
+./t/{a,b}{c,d} <=> ./t/ac ./t/ad ./t/bc ./t/bd
- ./t/{a,b,c} <=> ./t/a ./t/b ./t/c
- 符号替换
- - 上一个工作目录
- ~ 当前用户家目录
- ~USER USER家目录
- ~+ $PWD
- ~- 上一个$PWD
${!VAR}
VAR的变量名 支持globbing
- 算术展开
$((EXPRESSION))
例:$((C#N))
C进制的N$[EXPRESSION]
例:$[N1+N2]
N1+N2的和{N1..N2}
例:{1..10}
展开1~10的序列
- 字符串替换
${#STR}
求STRING的长度${STR:POS}
求从POS开始的子串${STR:POS:LEN}
求从POS开始长度为LEN的子串${STR#SUBSTR}
从左往右, 删除最短匹配$SUBSTR
.${STR##SUBSTR}
从左往右, 删除最长匹配$SUBSTR
.${STR%SUBSTR}
从右往左, 删除最短匹配$SUBSTR
.${STR%%SUBSTR}
从右往左, 删除最短匹配$SUBSTR
.${STR/OLD/NEW}
从左往右, 替换第一个$OLD
为$NEW
.${STR//OLD/NEW}
替换所有$OLD
为$NEW
.${STR/#OLD/NEW}
如果以$OLD
开头, 替换为$NEW
.${STR/%OLD/NEW}
如果以$OLD
结尾, 替换为$NEW
.
文件名通配(globbing)
- 文件名通配符号
- * 任意长度的任意字符
- ? 任意单个字符
- [] 匹配指定范围内的任意单个字符
- [^] 匹配指定范围外的任意单个字符
- 匹配字符组 ([A1-A2]匹配范围, A1, A2为任意字母或数字.)
- [a-z] 匹配a-z
- [A-Z] 匹配A-Z
- [0-9] 匹配0-9
[a-zA-Z0-9] 匹配字母和数字
- 特殊符号匹配
- [[:space:]] 空白字符
- [[:punct:]] 标点符号
- [[:lower:]] 小写字母
- [[:upper:]] 大写字母
- [[:alpha:]] 大小写字母
- [[:digit:]] 数字
- [[:alnum:]] 数字和大小写字母
多命令和重定向
- 命令连用
- \ 单行命令延续
- ; 分步执行命令
- && 同时执行命令
- || 上一个命令执行失败时执行命令
&& || 相当于if else控制流程结构
- 重定向
- < 重定向标准输入
- << EOF 重定向大段标准输入(EOF结尾)
- > 重定向标准输出[覆盖方式]
- >> 重定向标准输出[追加方式]
- 2> 重定向错误输出(覆盖方式)
- 2>> 重定向错误输出(追加方式)
- &> 重定向标准输出和错误输出(覆盖方式)
- &>> 重定向标准输出和错误输出(追加方式)
*set -C 禁止对已经存在文件使用覆盖重定向 >|(强制覆盖)
set +C 关闭上述功能*
- 管道 将前一个命令的输出作为后一个命令的输入
格式: CMD1 | CMD2 | CMD3 | …
配置文件
- 主要配置文件
- /etc/profile 全局配置文件
- /etc/profile.d/*.sh 全局配置执行脚本
- ~/.bashrc 个人配置文件
- ~/.bash_profile 个人配置文件(不常用)
- ~/.bash_history 命令历史文件
- ~/.bash_logout 注销时执行的文件
- /etc/bashrc 设置一些属性(redhat系列才有)
- 其他相关
- /etc/sysconfig/i18n 语言和编码配置文件
- /etc/man.config 设置man page的搜索路径的文件
- /etc/issue 登陆显示信息的文件
- /etc/motd 远程连接登陆显示信息的文件
- /etc/inputrc 输入特性文件
- 配置文件调用顺序
- 登录式
- /etc/profile
- /etc/inputrc
- /etc/profile.d/*.sh
- /etc/sysconfig/i18n
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
- 非登录式
- ~/.bashrc
- /etc/bashrc
- /etc/profile.d/*.sh
- /etc/sysconfig/i18n
- 登录式