bash 基础特性之:命令历史
命令历史:shell进程会在会话中保存此前用户提交执行过的命令;shell
- 查看历史命令:
- ~]# history
- 定制history的功能,可经过环境变量来实现;
- HISISIZE:shell进程可保留的命令历史条数;
- HISIFILE:持久保存命令历史的文件 (.bash_history);
- HISIFILESIZE:命令历史文件的大小;
- 用法:
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中;
-d:删除指定命令历史条目;
- 显示最近#条历史命令 (history #);
- 调用历史列表中的命令 ( ! number);
- 再次执行上一条命令 (!!);
- 再一次执行历史列表中最近一个以STRING开头的命令 (!STRING);
- 调用上一条命令的最后一个参数 (ESC+.、file !$、file alt+.);
- 控制命令历史的方法
- 环境变量:HISICONTROL
- 参数:
ignorespace:忽略以空白字符开头的命令;
ignoredups:忽略以空白字符开头的命令;
ignoreboth:以上二者同时生效;
echo $HISTCONTROL;
- 修改变量值
HISICONTROL=Ignorespace
bash 基础特性之:命令补全
- 命令补全:
- shell程序在接收到用户执行命令的请求,分析完成后,最左侧的字符串会被看成命令;
- 命令查找机制:
- 根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名;
- 给定的打头字符串若是能惟一标识某命令程序文件,则直接补全;
- 不能唯一标识某命令程序文件,再击打一次tab键,会给出列表;
- 路径补全:
- 在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下的每一个文件 (tab);
- 若是能唯一标识,则直接补全。不然,再一次tab给出列表;
bash 基础特性之:命令行展开
bash 基础特性之:命令的执行状态结果
- 命令执行的状态结果
- bash经过状态返回值来输出此结果 (成功:0,失败:1-255);
- 命令执行完成后,其状态返回值保存于bash的特殊变量中 " $? ";
- 命令正常执行时,有的还会有命令返回值,其根据命令及其功能不一样,结果各不相同;
- 两种引用命令的执行结果
- $(COMMAND)
- `COMMAND`
- 示例:mkdir $(date +%H-%M-%S)
bash 基础特性之:引用
- 强引用:' '
- 弱引用:" "
- 命令引用: ` `
bash 基础特性之:快捷键
- Ctrl+a:跳转至命令行行首;
- Ctrl+e:跳转至命令行行尾;
- Ctrl+u:删除行首至光标所在处之间的全部字符;
- Ctrl+k:删除光标所在处至行尾的全部字符;
- Ctrl+l:清屏(等同clear);
bash 基础特性之:globbing
globbing:文件名通配ide
- 星号 *:匹配任意长度的任意字符 (pa*,*pa*,*pa,*p*a*);
- 问号?:匹配任意单个字符(pa?,??pa,p?a,p?a?);
- 中括号[]:匹配指定范围内的任意单个字符 ([a-z] [A-Z] [0-9] [a-z0-9]);
- [^]:匹配指定范围外的任意单个字符([^[:upper:]],[^0-9],[^[:alnum:]]);
bash 基础特性之:命令hash
- hash命令:
- -d COMMAND,删除
- -r 清空hash缓存
- 执行命令的查找顺序: hash、alias、path;
- 解释:
- 把命令的查找结果,缓存在缓存中就叫hash;
- 何时须要清空hash表,hash缓存不正确时;
bash 基础特性之:变量
- 变量是什么?
- 简单点,变量其实就是内存中的空间、然后在程序运行过程当中给取了一个名字而且能找到这段空间的起始地址,即 变量名+指向的内存空间,而后有名称就能直接引用;
- 变量赋值:
- 把要存储的数据存储到变量名所指向的内存空间的过程,就叫作变量赋值;
- 变量定义之变量的类型:
- 根据存储数据的变量类型不一样,其经常使用环境变量有如下常见几种...
本地变量:做用域仅为当前shell进程;
环境变量:当前shell进程及其子进程;
局部变量:做用域仅为代码片断,对bash shell 而言函数上下文;
位置参数变量:当执行脚本的shell进程传递的参数;
特殊变量:指shell内置和有特殊公用的变量;
- 变量的定义方式:
- 本地变量
赋值:(name=value)
引用方法:$(name),$name
变量替换:使用双引号,单引号不会被替换值;
查看变量:set
撤销变量:unset name
- 环境变量
赋值:export name=value | name=value(export name) | declare -x name=value | name=value
引用:$(name),$name
示例:firestname=jerry or declare -x firestname
注意:bash内嵌了许多环境变量(一般为大写字符),用于定义bash的工做环境;
(PASH,HISTFILE,HISTSIZE,HSIFLESIZE,HSITCONTROL,SHELL,HOME.UID,PWD,OLDPWD)
查看当前shell:echo $SHELL
查看环境变量:export、declare-x 、printenv、env
撤销环境变量:unset name
- 把一个变量只读格式:
- declare -r name
- readonly name,示例readonly firestname
- 注意:不支持从新赋值且没法撤销,存活时间为当前shell进程生命周期;
bash 基础特性之:执行多条命令(短路与、短路或)
- 短路 ‘与,&&’、短路或,‘||’
~]# COMMAND1;COMMAND2;COMMAND3...(其命令之间有逻辑关系)
- 逻辑运算:就是判断真或假
算数若是为真则表示为(true,yes,on,1)
算数若是为假则表示为(false,no,off,0)
- 与、或、非、异或
- 与,表示乘法,叫短路与运算
1 && 1 =1
1 && 0 =0
0 && 1 =0
0 && 0 =0
只有参与运算的两个结果都为真,则为真。不然则为假;
- 或,表示加法,叫短路或运算
1 || 1 =1
1 || 0 =1
0 || 1 =1
0 || 0 =0
只有两者都为零,结果才为零,不然,则为1;
- 非,表示取反,非假即为真
! 1 = 0,! 0 = 1
- 异或,判断是否不一样
两个数字运算的结果不一样则为1,相同则为0;
-
表示法:函数
- 与运算:&&
~]# COMMAND1 && COMMAND2,将两个命令的执行结果作状态‘与’运算;
意义是:可实现控制功能,前面的命令运算结果取决于后面运行的命令;
COMMAND1为‘假’,则COMMAND2不会再执行,不然COMMAND1为‘真’,则COMMAND2必须执行;
- 或运算:| |
~]# COMMAND1 || COMMAND2,将两个命令的执行结果作状态‘或’运算;
意义是:可实现控制功能,前面的命令运算结果取决于后面运行的命令;
COMMAND1为‘真’,则COMMAND2不会执行,不然COMMAND2为‘假’,则COMMAND2必须执行;
~]# touch /tmp/test.etc && ls /etc > /tmp/test.etc
- 注意:命令之间存在‘逻辑关系’,前面的命令结果都会取决于后面的命令;
done