egrep及扩展的正则表达式
egrep = grep -E;
扩展正则表达式的元字符:
字符匹配
“.”、[ ]、[^];
匹配次数
""、+、?、{m}、{m,n};
位置锚定
^、$、\<、\>、\b;
分组
( );
支持后向引用;
或者:|
例子:a|Cat;
fgrep:不支持正则表达式搜索,严格匹配给定的字符;
bash
bash中变量的种类
本地变量:生效范围为当前shell,不包括其父shell和子shell
环境变量:生效范围为当前shell及其子shell;
局部变量:生效范围为当前shell一段代码片段中(通常指一段函数之内);
特殊变量:$?,$0,$*,$@,$#;
位置变量:根据位置对应关系,将命令行中的参数依次赋值给脚本中的位置变量:$1,$2,… ;
本地变量
变量赋值:name=‘value’;
value:
可以使用直接赋值; name=‘string’
可以引用现有的变量;name=‘$PATH’
可以引用命令;name=`command` 或 name=$(command);
变量引用:
" ":弱引用,其中的变量引用会被替换为相对应的值;
’ ':强引用,其中的变量引用不会被替换为对应的值,而是保持原来的字符内容;
显示已定义的变量:
set;
撤销变量:
unset name;
环境变量:本地变量可以被导出为环境变量;
变量声明,赋值:
export name=value;
declare -x name=value;
变量引用:同本地变量;
显示所有环境变量
env、export、printenv;
销毁变量:
unset name;
位置变量
在脚本代码中调用通过命令行传递给脚本的参数;
$1,$2,…:对应调用第1、第2、…个参数;
:调用命令行中的所有参数,并且当做一个参数来使用(不精确,但意思类似);
KaTeX parse error: Expected 'EOF', got '#' at position 32: …每个参数单独调用;
$#̲:传递给脚本的参数个数;
…RANDOM;
增强型赋值:
+=,-+,++,–,/=,%=,==;
自增、自减:
let var++ → let var+=;
let var-- → let var-=;
条件测试
判断某需求是否满足,需要由测试机制来实现;
Note:专用的测试表达式需要由测试命令辅助完成测试过程;
测试命令
test expression;
[ expression ];
[[ expression ]];
Note:方括号于表达式中间必须存在一个空白字符;
bash的测试类型
数值测试
-gt:是否大于;
-lt:是否小于;
-ne:是否不等于;
-ge:是否大于等于;
-te:是否小于等于;
-eq:是否等于;
字符测试
>:是否大于;字符的大小是根据ASCII来比较的;
<:是否小于;
==:是否等于;
!=:是否不等于;
=~:左侧的字符串是否能被右侧的PATTERN所匹配;
Note:使用~=时,需要使用[[ expression ]];
-z:是否为空;
-n:是否为非空;
Note:用于字符串比较的时候,应该使用引号把字符串括起来;
bash条件测试(文件测试)
测试方式
test EXPRESSION
[ EXPRESSION] | [[ EXPRESSION ]] |
---|
测试表达式的类别
数值比较
字符串测试
文件测试:获取帮助:man bash;
-a FILE:文件是否存在;
-e FILE:文件是否存在;
-d FILE:文件是否存在且为目录;
-f FILE:文件是否存在且为普通文件;
-r FILE:文件是否存在当前使用者对此文件是否具有可读权限;
-w FILE:文件是否存在当前使用者对此文件是否具有可写权限;
-x FILE:文件是否存在且当前使用者对此文件是否具有可执行文件;
-g FILE:文件是否存在且具有sgid权限;
-u FILE:文件是否存在且具有suid权限;
-s FILE:文件是否存在且非空;
-t fd:fd表示文件描述符打开,且与某终端相关;
一般情况下,主机启动时自己启动的文件与终端无关,自己手动启动的与终端有关;
双目测试:通常用于比较两个配置文件的新旧;
FILE1 -ef FILE2:FILE1与FILE2是否为同一个文件;
FILE1 -nt FILE2:FILE1是否比FILE2更新;
FILE1 -ot FILE2:FILE1是否比FILE2更旧;
组合条件测试:
逻辑运算:
第一种方式
COMMAND || COMMAND
COMMAND && COMMAND
!COMMAND
[ -e FILE ] || [ -r FILE ]
第二种方式
COMMAND -o COMMAND
COMMAND -a COMMAND
! COMMAND
必须使用测试命令进行;
[ -e FILE -o -r FILE ]
取非的时候可能用到:
摩根定理:
!(P && Q) = (!P) || (!Q)
!(P ||Q) = (!P) && (!Q)
bash自定义退出状态码:
exit [n];
脚本中一旦执行到exit,就会直接退出脚本,且退出状态码为[n];
如果没有设置exit,则以脚本最后一条命令的状态码为脚本最后的退出状态码;
注:根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删