1.命令历史
①修改环境变量
shell> export 变量名='值'
永久需修改环境变量
shell> vi .bash_profile 将绝对路径加入其中
②先按Esc,再按.可实现调用上一次的变量
!$ 也可实现调用上一次变量
2.命令补全
Tab补全
3.路径补全
Tab补全
4.命令行展开
{}:可承载一个以逗号分隔的列表,并将其展开为多个路径
/tmp/{a,b} = /tmp/a,/tmp/b
5.命令的执行结果状态
bash使用特殊变量$?保存最近一条命令的执行结果状态
echo $? 查看命令执行的结果状态
0 成功
1-255 失败
程序执行两类结果
程序的返回值
程序的执行状态结果
6.命令别名(alias)
(1)alias
显示当前shell进程所有可用的命令别名
(2)alias NAME='VALUE'
定义别名NAME,其中相当于执行命令VALUE
注意:命令行定义的别名仅对当前shell有效,如需永久生效需修改配置文件
仅当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
配置文件修改后不会直接生效,需重新读取配置文件
bash进程重新读取配置文件
①source /path/to/config_file
②. /path/to/config_file
(3)unalias
unalias NAME 撤销别名
-a 撤销所有别名
(4)如果别名与原命令相同名称,可使用"\COMMAND"
7.glob(globbing)
bash中用于实现文件名“通配”
通配符:*,?,[]
(1)*:任意长度的任意字符
(2)?:任意单个字符
(3)[]:匹配指定范围内的任意单个字符
[0-9]
[a-z]:不区分大小写
[A-Z]:大写字母
(4)^:匹配指定范围外的任意单个字符
[^0-9a-z]
(5)专用字符集合
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:空格字符
[:punct:]:标点符号
8.bash快捷键
Ctrl+l:清屏,相当于clear
Ctrl+a:跳转至命令开始处
Ctrl+e:跳转至命令结尾处
Ctrl+c:取消命令的执行
Ctrl+u:删除命令行首至光标所在处的所有内容
Ctrl+k:删除光标所在处至命令行尾部的所有内容
Ctrl+d:重新登陆
9.bash的I/O重定向及管道
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd:file descriptor(文件描述符)
标准输入:keyboard,0
标准输出:monitor,1
标准错误输出:monitor,2
I/O重定向:改变标准位置
①输出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS
>:覆盖重定向,目标文件种的原有内容会被清除
>>:追加重定向,新内容会追加至目标文件尾部
# set -C:禁止将内容覆盖输出至已有文件种
强制覆盖:>
# set +C:恢复
2>:覆盖重定向错误输出数据流
2>>:追加重定向错误输出数据流
标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向
&>:覆盖重定向
&>>:追加重定向
COMMAND > /path/to/file.out 2> &1
COMMAND >> /path/to/file.out 2>> &1
②输出重定向:<
tr命令:转换或删除字符
tr SET1 [SET2] 将SET2字符转换为SET1字符
tr -d SET1 删除SET1字符
HERE Documentation: <<
# cat << EOF
# cat > /path/to/somfile << EOF
③管道
COMMAND1 | COMMAND2 | COMMAND3 | ...
NOTE:最后一个命令会在当前shell进程的子shell进程中执行
tee命令:将输入的内容输出到文件
tee FILE 将输入的内容输出到FILE
tee -a FILE 将输入的内容追加输出FILE