grep [OPTIONS] PATTERN filename 根据模式搜索文本 并将符合模式的文本显示出来 Pattern模式:文本字符和正则表达式的元字符组合而成匹配条件
元字符:
.: 任意单个字符[]: 匹配任意范围内的单个字符[^]: 匹配任意范围外的单个字符 [:digit:],[:lower:],[:upper:],[:punct:],[:space:],[:alpha:],[:alnum:]匹配字符个数:
*: 匹配其前面字符任意次数.*: 任意长度任意字符\?: 匹配其前面的字符1次或0次\{m,n\}: 匹配其前面的字符>=m次 <=n次位置锚定:
^: 行首 次字符后面的任意内容必须出现在行首$: 行尾 次字符后面的任意内容必须出现在行尾\<: 单词出现在词首\>: 单词出现在词尾分组: \(\) \1,\2,\3: 引用前面的分组
次数匹配: +: 匹配其前面的字符至少1次 或者 a|b: a或者b c|Cat 意思是c或者Cat字符 (c|C)at
IPv4: 5类 A B C D E A: 1-127 B: 128-191 C: 192-223
bash变量类型:
环境变量 export VARNAME=VALUE 脚本在执行时会启动一个shell进程 对当前shell及其子shell有效本地变量 set VARNAME=VALUE: 作用域为当前代码段 set可以省略 unset VARNAME: 释放变量 使用 VARNAME或 VARNAME引用 [root@localhost tmp]# ANIMAL="pig" [root@localhost tmp]# echo "The animal is ${ANIMAL}s" The animal is pigs 局部变量 local VARNAME=VALUE: 作用于为当前代码段位置变量 $1,$2,$3.... 引用脚本参数 shift n特殊变量 $?:上一个命令执行状态返回值: $#: 参数的个数 $*: 参数列表 $@: 参数列表 [root@localhost ~]# ls /varr ls: cannot access /varr: No such file or directory [root@localhost ~]# echo $? 2 [root@localhost ~]# lss -bash: lss: command not found [root@localhost ~]# echo $? 127 [root@localhost ~]# ls anaconda-ks.cfg demo.sh Downloads post-install Templates Videos demo Desktop Music post-install.log test demofile Documents Pictures Public test_dir [root@localhost ~]# echo $? 0查询状态返回代码(0-255) 0:正确执行 1-255: 错误执行:1,2,127系统预留
/dev/null: 软件模拟设备, bit bucket,数据黑洞
查看当前shell中的环境变量: printenv env export
条件测试的表达: [expression] [[expression]] test expression
整数比较: -eq: 测试两个整数是否相等 $A -eq $B -ne: 测试两个整数是否不等: $A -ne $B -gt: 大于 -lt:小于 -ge: 大于或等于 -le:小于或等于
字符测试: ==: 测试是否相等 !=: 测试是否不等 > < -n string: 测试字符串是否为空 -s string: 测试字符串是否不空
命令间的逻辑
变量名称: 只能包含字母、数字和下划线,并且不能数字开头:不应该跟系统中已有的环境变量重名
if 判断条件; then statement1 statement2 … else statement3 statement4 fi
shell算数表达式: A=3 B=5 1. let算术运算表达式 let C=$A+$B 2.$[算术表达式] C=$[ $A+$B ] 3.$((算数表达式)) C=$(($A+$B)) 4.expr算术运算表达式,表达式中各操作数及运算符之间有空格,而且要使用命令引用 C=`expr $A + \$B`
exit: 退出脚本 exit NUMBER: NUMBER代表状态码