Shell函数和正则表达式
1. shell函数
shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数。给这段代码起个名字称为函数名,后续可以直接调用该段代码。
格式:
func() { #指定函数名
command #函数体
}
Shell 函数很简单,函数名后跟双括号,再跟双大括号。通过函数名直接调用,不加小括号。
#显示文本颜色
[root@localhost ~]# vim test.sh
#!/bin/bash
fun (){
for i in {..}
do
echo -e "\033[${i}mHello World\033[0m"
done
}
fun
:wq
[root@localhost ~]# bash test.sh
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
……
#函数返回值
[root@localhost ~]# vim test1.sh
#!/bin/bash
fun () {
echo ""
return
echo ""
}
fun
[root@localhost ~]# bash test1.sh #return 在函数中定义状态返回值,返回并终止函数,但返回的只能是 0-255 的数字,类似于 exit。
[root@localhost ~]# vim test1.sh
#!/bin/bash
fun () {
echo ""
exit
}
fun
:wq
[root@localhost ~]# bash test1.sh [root@localhost ~]# echo $?
#函数传参
[root@localhost ~]# vim test1.sh
#!/bin/bash
fun () {
echo "Hello $1"
}
fun world
:wq
[root@localhost ~]# bash test1.sh
Hello world
2. shell正则表达式
正则表达式在每种语言中都会有,功能就是匹配符合你预期要求的字符串。
Shell 正则表达式分为两种:
基础正则表达式
扩展正则表达式:扩展的表达式有+、?、| 和()
正则表达式就是为了处理大量的文本、字符串而定义的一套规则和方法
通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。Linux正则表达式一般以行为单位处理。
1> 正则表达式和通配符的本质区别
1)不需要思考的判断方法:在三剑客awk,sed,grep,egrep都是正则,其他都是通配符
2)区别通配符和正则表达式最简单的方法:
(1)文件目录名===>通配符
(2)文件内容(字符串,文本【文件】内容)===>正则表达式
以grep工具说明常用正则表达式:
符号 |
描述 |
实例 |
. |
一个点.匹配任意单个字符(必须存在) |
例子:l..e 可以表示 love like leee 不可以表示的 labcde le lee [root@localhost like love lect [root@localhost like love |
^ |
匹配前面字符串开头 |
匹配abc开头的行 [root@localhost abc you love me i love you abc [root@localhost abc you love me |
$ |
匹配前面字符串结尾 |
匹配abc结尾的行 [root@localhost abc you love me i love you abc [root@localhost i love you abc |
|
过滤掉空行 [root@localhost 123fsasf12 #空行 fasfdsadfsa adasfa12 123ddfs 167dsaf daf [root@localhost 123fsasf12 fasfdsadfsa adasfa12 123ddfs 167dsaf daf |
|
* |
匹配前一个字符的零个或多个 |
a* 表示出现任意个a的情况 [root@localhost abcaa bcacd aaabc cbda zxcv [root@localhost a aa a aaa a a*b 表示b前面有任意个a的情况(可以是0个) [root@localhost abcaa bcacd aaabc cbda [root@localhost ab b aaab b |
.* |
表示任意长度的任意字符 |
例子:过滤出一行中a在前,b在后的行 条件: 包含 a 和 b 字母 a 必须在 b前面 [root@localhost abcaa bcacd aaabc cbda zxcv [root@localhost abcaa aaabc |
+(扩展正则) |
表示其前面的字符出现最少一次的情况 |
[root@localhost abcaacdfabvfab bcacd aaabc cbda zxcv [root@localhost abcaacdfabvfab aaabc [root@localhost abcaacdfabvfab aaabc [root@localhost [root@localhost |
? (扩展正则) |
表示其前面的字符出现最多一次的情况(可以0个 |
匹配ac或c(c前面出现的a为0或多个,ac相连) [root@localhost abcaacdfabvfab bcacd aaabc cbda zxcv [root@localhost [root@localhost abcaacdfabvfab bcacd aaabc cbda zxcv |
[ ] |
表示范围内的一个字符 |
[root@localhost 123fsasf12 fasfdsadfsa adasfa12 123ddfs 167dsaf daf 以a-z开头(字母开头) [root@localhost fasfdsadfsa adasfa12 daf |
[ .-.] |
匹配中括号中范围内的任意一个字符 |
匹配所有字母 echo -e |
[^] |
匹配[^字符]之外的任意一个字符 |
[root@localhost 123fsasf12 fasfdsadfsa adasfa12 123ddfs 167dsaf daf [root@localhost #不以字母开头的文件 123fsasf12 123ddfs 167dsaf |
{n}或者{n,} |
{n}表示严格匹配n个字符 {n,}匹配花括号前面字符至少 n个字符 |
[root@localhost bbbasdfhhf bb1235sdf babababba agdsaf asdf [root@localhost bbbasdfhhf bb1235sdf babababba [root@localhost #至少3个 bbbasdfhhf [root@localhost bbbasdfhhf |
|
规则一:花括号和分组在基础正则中需要加上斜线进行转义,但是在扩展正则中不要加斜线 |
|
{n,m} |
匹配花括号前面字符至少 n个字符,最多 m 个字符 |
[root@localhost #a前面至少2个b最多3个b bbbasdfhhf babababba [root@localhost #f和f之间最少2个h bbbasdfhhf [root@localhost #a到f之间最多1个s agdsaf |
\< |
锚定单词首部(单词一般以空格或特殊字符做分隔) |
[root@localhost df:ceroot:fasdf:rootvdga agd dsaf rootadg sfafa [root@localhost #以特殊字符分割,首部为root df:ceroot:fasdf:rootvdga agd dsaf rootadg dagaggd |
\> |
锚定单词尾部(单词一般以空格或特殊字符做分隔) |
[root@localhost #以特殊字符分割,尾部为root df:ceroot:fasdf:rootvdga |
( ) |
\1 调用前面的第一个分组 |
[root@localhost efdgfd1fasdf1 1aefeeea2dfg 3fdavfdva3fggfdf 33dfagqr23zdfbd abffsh23sfg [root@localhost #调用前面的第一个数字分组,过滤出一行中有两个相同数字的行 efdgfd1fasdf1 3fdavfdva3fggfdf 33dfagqr23zdfbd [root@localhost #调用前面的第一个数字分组,找出行首和行位相同数字的行 1aefeeea2dfg1 |
|
第二个规则:在单词锚定中和分组调用中,基础正则和扩展正则都必须加斜线 |
|
|(扩展正则) |
匹配竖杠两边的任意一个 |
过滤出cat 或者Cat # grep # grep |
3. 总结
1> 正则表达式
一、字符匹配
.
[]
[^]
二、次数匹配
*
\{m,n\}
三、锚定
^
$
\<
\>
四、分组
\(\)
\1
2> 扩展正则表达式
grep -E
egrep
一、字符匹配
.
[]
[^]
二、次数匹配
*
{m,n}
+ 表示其前面的字符出现最少一次的情况
?表示其前面的字符出现最多一次的情况
三、锚定
^
$
\<
\>
四、分组
()
\1
\2
五、或
|
正则表达式中的{}以及()都需要加上\进行转义,而扩展正则表达式不需要
|, ?,+是扩展正则独有的
锚定单词首部和尾部在扩展正则以及正则中都需要加上\
Shell函数和正则表达式的更多相关文章
- shell(shell函数、shell正则表达式)
本章内容 shell函数 shell正则表达式 1.shell函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. 格式: funname () { CMD #函数体 ...
- shell脚本三——正则表达式
shell函数:shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式:fun() { 命令 } Shell ...
- Shell入门教程:Shell函数详解
Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快. 1.函数定义 ...
- Shell入门教程:Shell函数的返回值
shell函数返回值一般有3种方式: 1.return语句(默认的返回值) shell函数的返回值可以和其他语言的返回值一样,通过return语句返回. 比如: #!/bin/bash functio ...
- (转)Shell函数
Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快. 1. 函数 ...
- 任督二脉之Shell中的正则表达式
VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...
- Linux Shell系列教程之(十五) Shell函数简介
本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...
- Shell函数的简单应用
Shell函数的简单应用 在脚本内给函数传参: #!/bin/bash . /etc/init.d/functions CheckUrl (){ curl -I -s $ | head - } Che ...
- Shell函数语法
Shell函数语法 定义函数: function 函数名(){ 指令... } 调用函数,方法1: 函数名 调用函数,方法2: 函数名 参数一 参数二 return在函数里面使用会跳出函数并 ...
随机推荐
- bzoj 1090: [SCOI2003]字符串折叠【区间dp】
设f[i][j]为区间(i,j)的最短长度,然后转移的话一个是f[i][j]=min(j-i+1,f[i][k]+f[k+1][j]),还有就是把(k+1,j)合并到(i,k)上,需要判断一下字符串相 ...
- UVA1328 Period【KMP/周期串/循环节】By cellur925
鲜有的在luogu发题解以及使用LaTex??? 就丢链接跑了.
- iOS 将navigationItem.titleView设置为自定义UISearchBar (Ficow实例讲解)
这篇文章可以解决以下问题: 1.将searchBar设置为titleView后,无法调整位置的问题 : 2.searchBar的背景色无法设置为透明色的问题: 3.searchBar输入框内用户输入的 ...
- LCA Codeforces 100685G Gadget Hackwrench
题目传送门 题意:一棵有向的树,问u到v是否可达 分析:假设是无向树,DFS时正向的权值+1,反向的权值-1,然后找到LCA后判断dep数组和d数组就可以了 /******************** ...
- How the performance impacts your revenue-性能影响营收
看完国外一个APM厂商最后的一个业务介绍视频,终于想通了PE领域中最顶层的应用目标,也就是如标题所云.那么这个影响效果是如何做到的?最终的步骤其实很简单,也就是利用大数据进行分析.而自己先前还没有想到 ...
- Linux 从源码编译安装 Nginx
Nginx 是一个高性能的 HTTP 和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器.Nginx 编译安装比较简单,难点在于配置.下面是 Nignx 0.8.54 编译安装和简 ...
- 一个简单的139邮箱登录脚本--->java-selenium
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebE ...
- ios水果风暴游戏源码项目下载
这是一款ios水果风暴游戏源码下载,介绍给大家一下,喜欢的朋友可以下载学习一下吧.应用介绍:这是一个以获得高分和挑战更高难度为目的的游戏.游戏中有九种不同的卡通水果,您可以交换屏幕中两个相邻水果的位置 ...
- 洛谷 P1163 银行贷款
题目描述 当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款.这个问题要求计算出贷款者向银行支付的利率.假设利率按月累计. 输入输出格式 输入格式: 输入文件仅一行包含三个用空格 ...
- 原创:shell两个整数的比较 思想版
思想是学的 代码创作是自己的 很喜欢前几行的逻辑严谨 #!/bin/bash#判断两个整数的大小read -p "请输入两个整数a b :" a b #或者使用a=$1[ -z & ...