文章目录
一、函数
1. 函数定义
1.1 方法(1)
funcName()
{
funcBody (commands)
}
1.2 方法(2)
function funcName()
{
funcBody (commands)
}
2. 函数的使用
2.1 命令行使用
-
使用 source test.sh 来声明这些函数,就可以在命令行使用。并且 source 后函数还可以使用 tab 进行补全。
-
若要全局使用函数,将函数写到 /etc/bashrc 文件中。
2.2 脚本中调用
xhr@ubuntu:~$ cat variable.sh
#!/bin/bash
function functest() {
echo $1 $2
}
functest $2 $1
xhr@ubuntu:~$ ./variable.sh xhr ly
ly xhr
二、正则表达式
正则表达式(Regular Expression、regex 或 regexp,缩写为 RE),也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。
正则表达式这个概念最初是由 Unix 中的工具软件(例如 sed 和 grep)普及开的。
支持正则表达式的程序如:locate | find | vim | grep | sed | awk
作用:
- 匹配邮箱、匹配身份证号码、手机号、银行卡号等
- 匹配某些特定字符串,做特定处理等等
名词解释:
- 元字符
指那些在正则表达式中举有特殊意义的专用字符,如:点(.) 星(*) 问好(?) 等 - 前导字符
位于元字符前面的字符。 abc* aooo.
1. 第一类正则表达式
1.1 正则中普通常用的元字符
元字符 | 功能 | 备注 |
---|---|---|
. | 匹配除了换行符以外的任意单个字符 | |
* | 前导字符出现0次或连续多次 | |
.* | 任意长度字符 | ab.* |
^ | 行首(以…开头) | ^root |
$ | 行尾(以…结尾) | bash$ |
^$ | 空行 | |
[] | 匹配括号里任意单个字符或一组单个字符 | [abc] |
[^] | 匹配不包含括号里的任一单个字符或一组单个字符 | [^abc] |
^[] | 匹配以括号里任意单个字符串或一组单个字符开头 | ^[abc] |
^[^] | 匹配不以括号里任意单个字符串或一组单个字符开头 |
1.2 其他常用元字符
元字符 | 功能 | 备注 |
---|---|---|
\< | 匹配单词的头 | grep ‘\<hel’ hello.txt |
\> | 匹配单词的尾 | grep ‘rld’ world.txt |
\< \> | 全字匹配 | 类似于 grep -w |
\{n\} | 匹配前导字符连续出现n次 | |
\{n,\} | 匹配前导字符至少出现n次 | |
\{n,m\} | 匹配前导字符出现n到m次之间 | |
\( \) | 保存被匹配的字符 | [note] |
\d | 匹配数字 (grep -P) 加 -P 选项 | [0-9] |
\w | 匹配字母数字下划线 (grep -P) | [a-zA-Z0-9] |
\s | 匹配空格、制表符、换页符 (grep -P) | [\t\r\n] |
[note] \( \) 的使用:
vim 一个文件,“ \1 ” 代表了被保存的第几个字符串,回车后就可以保持前部分字符串,home 变为 web。
1.3 扩展类正则常用元字符
- grep 命令使用这类正则,需要添加 -E 选项
- 或者使用 egrep 命令
- sed 需要添加 -r 选项
扩展元字符 | 功能 | 备注 |
---|---|---|
+ | 匹配一个或多个前导字符 | bo+ 匹配 boo、bo |
? | 匹配零个或一个前导字符 | bo? 匹配 b、bo |
| | 或 | a|b 匹配 a或b |
() | 组字符(字符串) | (my|your)self 匹配 myself 或 yourself |
{n} | 前导字符重复 n 次 | |
{n,} | 前导字符至少重复 n 次 | |
{n,m} | 前导字符重复 n 到 m 次 |
2. 第二类正则表达式
以下示例都为扩展正则
表达式 | 功能 | 示例 |
---|---|---|
[:alnum:] | 字母与数字字符 | [[:alnum:]]+ |
[:alpha:] | 字母字符(包括大小写字母) | [[:alpha:]]{4} |
[:blank:] | 空格与制表符 | [[:blank:]]* |
[:digit:] | 数字 | [[:digit:]]? |
[:lower:] | 小写字母 | [[:lower:]]{4,} |
[:upper:] | 大写字母 | [[:upper:]]+ |
[:punct:] | 标点符号 | [[:punct:]] |
[:space:] | 包括换行符、回车等在内的所有空白 | [[:space:]]+ |