shell函数与正则

函数

个人理解的函数,是将实现某一功能的代码块抽离封装以实现代码的复用

函数定义

#函数定义格式
[function] 函数名 [()]
{
	代码块
	[return int;]
}

注:
(1)此处中括号代表可选,即用户可以以下几种方式进行函数定义

#!/bin/bash

f1()
{
        echo "你好"
}

function f2
{
        echo "世界"
}

function f3()
{
        echo "hello world"
}

f1
f2
f3

运行后效果如图所示:
在这里插入图片描述
(2)return用于结束一个函数return后代码不执行;return语句可以不加,不加以最后一条命令运行结果作为返回值;return后跟数值范围为0-255

不带return的示例如下:

#!/bin/bash
#实现两个数相加
add()
{
        y=$(($1+$2))
        echo "a与b相加的和为 ${y}"
}
#赋值
read -p '请依次输入a,b的值(中间以空格分隔):' a b
#调用函数且传递参数
add ${a} ${b}
#输出函数返回值
echo $?

运行效果如下:
在这里插入图片描述
带return的示例如下:

#!/bin/bash
add()
{
        y=$(($1+$2))
        echo "a与b相加的和为 ${y}"
        return ${y}
}


read -p '请依次输入a,b的值(中间以空格分隔):' a b

add ${a} ${b}
echo $?

运行效果如下:
在这里插入图片描述
(3)函数内普通声明的变量作用于脚本全局,若想其只在函数内起作用在变量名前加local即可
简单示例如下:

#!/bin/bash

a()
{
        a=1
        local b=2
}

a=3
b=4

echo "调用函数前a为${a},b为 ${b}"
a
echo "调用函数a后a为${a},b为${b}"

运行效果如下:
在这里插入图片描述
拓:可将函数定义到用户环境变量(vi ~/.bashrc)中以直接调用。
简单示例如下:

  • 第一步修改文件:

在这里插入图片描述

  • 第二步使文件在当前窗口生效

在这里插入图片描述

  • 第三步调用函数即可

在这里插入图片描述

函数调用

  • shell窗口调用

第一步使相关函数文件生效:

source 函数所在文件名 

第二步调用:

#不传递参数
函数名
#传递参数
函数名 参数1 参数2 参数3
  • 脚本内调用
函数名

注:函数定义必须写在函数调用前否则会找不到该函数,此处可做如下理解A问B认不认识C,B已经告诉了A不认识,然后C又告诉了B他叫C;用户可自行理解一句话概括就是函数定义就是我告诉你我是谁且我能干什么,函数调用就是通过函数名使用该函数

  • 调用另一脚本中函数

第一步使其生效:

#在脚本中编写source或.命令
source 函数所在文件名

第二步调用:

#不传递参数
函数名
#传递参数
函数名 参数1 参数2 参数3

简单示例如下:
在这里插入图片描述

source 与. 两种执行方式无差别,source即为.

正则

正则表达式(Regular Expression、regex或regexp,缩写为RE)是一种字符模式,用于查找过程中匹配指定的字符。许多语言支持正则,如python,java等(模糊查询)

linux中支持正则表达式的程序有find、vi、grep、sed、awk

相关名词解释如下:

  • 元字符——在正则表达式中具有特殊意义的字符:点(.)、星(*)、问号(?)
  • 前导字符——位于元字符前一字符

常用元字符

在这里插入图片描述
示例文本(1.txt)内容如下:

gle
gooogle
taobao.com
taotaobaobao.com

jingdong.com
dingdingdongdong.com
10.1.1.1
192.168.21.133
hello world
helloworld yourself

示例1——o出现0次或多次的行
在这里插入图片描述
示例2——匹配g后不限长度字符
在这里插入图片描述
示例3——匹配行首为g的行
在这里插入图片描述
示例4——匹配行中包含a,b,ab,ba的行
在这里插入图片描述

其他元字符

在这里插入图片描述
注:表格中所有\符号用户均可理解为转义字符
示例1——取单词头为h的行
在这里插入图片描述
示例2——取单词尾为world的行
在这里插入图片描述
示例3——取单词hello所在的行
在这里插入图片描述
示例4——匹配文件中连续出现两个数字的行
在这里插入图片描述

示例5——匹配文件中的ip地址
在这里插入图片描述
示例6——vi模式下将192.168.21.133替换为192.168.21.122
在这里插入图片描述
在这里插入图片描述
示例7——匹配数字
在这里插入图片描述

扩展元字符

以下表中扩展元字符均需在grep -E或egrep模式下使用

在这里插入图片描述
示例1——匹配一个或多个o出现的行,且o在g后
在这里插入图片描述
示例2——匹配行中出现a或b的行
在这里插入图片描述
示例3——匹配出现helloworld或hiworld的行
在这里插入图片描述
示例4——匹配出现1-4次o的行
在这里插入图片描述

在这里插入图片描述
示例1——显示数字行
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值