Linux bash 基础特性
bash基础特性之一:命令历史
命令历史是指:shell进程会其会话中保存此前用户提交执行过的命令。
命令:
# history
history 功能定制:
# 定制history的功能,可通过如下环境变量实现:
1、HISTSIZE:shell进程可保留的命令历史的条数
2、HISTFILE:持久保存命令历史的文件
.bash_history:存放于 home directory 下
3、HISTFILESIZE:命令历史文件的大小
# 可修改环境变量的值(注意只对当前shell有效):
NAME='VALUE'
# 修改环境变量示例:
~# export HISTSIZE=10000
~# echo $HISTSIZE
10000
命令用法:
history [-c] [-d 偏移量] [n]
或 history -anrw [文件名]
或 history -ps 参数 [参数...]
常用选项:
-c: 清空命令历史
-d offset:删除指定命令历史
# history -d 999 6 从history历史中第999条开始,删除6条命令
-r: 从文件读取命令历史至历史列表中
-w:把历史列表中的命令追加至历史文件中
-a:把历史列表中的命令追加至历史文件中
history #:显示最近的#条命令
调用命令历史列表中的命令:
!#:再一次执行历史列表中的第#条命令
!!:再一次执行上一条命令
!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令
注意:命令的重复执行有时候需要依赖于幂等性(重复执行多次,结果是一样)
示例:
# cat 1.txt
1
2
# !!
cat 1.txt
1
2
# history
1 history
2 cat /etc/passwd
3 cat /etc/shadow
4 cat 1.txt
5 history
# !4
cat 1.txt
1
2
# !cat
cat 1.txt
1
2
调用上一条命令的最后一个参数:
快捷键:ESC, .
# 按一下 ESC 后,然后再按 . ,就会调用上一条命令的最后一个参数(很常用)
字符串:!$
示例:
# ls /etc/systemd/
bootchart.conf journald.conf logind.conf ...
# ls !$ # 调用上一条命令的最后一个参数
ls /etc/systemd/
bootchart.conf journald.conf logind.conf ...
# ls /etc/systemd/ # 按 “ESC .” 键调用上一条命令的最后一个参数
bootchart.conf journald.conf logind.conf ...
控制命令历史记录的方式:
环境变量:HISTCONTROL
ignoredups:忽略重复的命令
ignorespace:忽略以空白字符开头的命令
ignoreboth:以上两者同时生效
示例:
# echo $HISTCONTROL
ignoreboth
# export HISTCONTROL=ignoredups
# echo $HISTCONTROL
ignoredups
bash基础特性之二:命令或路径补全
- 命令补全
shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令。
命令查找机制:
1、查找内部命令。
2、根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名。
TAB键动作如下:
1、给定的打头字符串如果能惟一标识某命令程序文件,按TAB键则直接补全。
2、不能惟一标识某命令程序文件,再击TAB键一次,会给出列表。
PATH环境变量查看:
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 路径补全
在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件。
TAB键动作如下:
1、如果能惟一标识,则直接补全。
2、否则,再一次TAB,给出列表。
bash基础特性之三:命令行展开
~:自动展开为用户的家目录,或指定的用户的家目录
{ }:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
# 例如:/tmp/{a,b} 相当于 /tmp/a 和 /tmp/b
示例:
# mkdir -pv /tmp/x/{y1/{a,b},y2}
mkdir: created directory '/tmp/x'
mkdir: created directory '/tmp/x/y1'
mkdir: created directory '/tmp/x/y1/a'
mkdir: created directory '/tmp/x/y1/b'
mkdir: created directory '/tmp/x/y2'
# mkdir -v {a,b}_{c,d}
mkdir: created directory 'a_c'
mkdir: created directory 'a_d'
mkdir: created directory 'b_c'
mkdir: created directory 'b_d'
tree 命令介绍:
tree:tree [options] [directory]
-L level:指定要显示的层级
示例:
# tree /tmp/
/tmp/
├── systemd- ...
│ └── tmp
└── x
├── y1
│ ├── a
│ └── b
└── y2
7 directories, 0 files
bash基础特性之四:命令的执行状态结果
命令执行的状态结果:
bash通过状态返回值来输出此结果。
1、成功:0
2、失败:1-255
备注:命令执行完成之后,其状态返回值保存于 bash 的特殊变量 $? 中。
示例:
# cat 1.txt # 命令执行成功
1
2
# echo $? # 状态返回值为 0,达标执行成功
0
# cat 1.txt.txt # 命令执行失败
cat: 1.txt.txt: No such file or directory
# echo $? # 状态返回值非 0 ,代表命令执行失败
1
- 大家注意区分 “命令的执行结果” 和 “执行命令的状态结果”
命令的执行结果引用,有如下两种格式:
1、$(COMMAND)
2、`COMMAND` (反引号,不是单引号,是 TAB 键上的反引号)
示例:
# cat 1.txt # 执行命令
1
2
# echo $(cat 1.txt) # 引用命令执行结果
1 2
# echo `cat 1.txt` # 引用命令执行结果
1 2
# echo $? # 输出执行命令的状态结果
0
bash基础特性之五:引用
引用一般分为以下三种:
1、强引用:''
2、弱引用:""
3、命令引用: