函数及正则(grep、sed)

函数

1. 什么是函数?

shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数
给这段代码起个名字称为函数名,后续可以直接调用该段代码的功能

2. 如何定义函数?

  • 方法1:

函数名() { 函数体(一堆命令的集合,来实现某个功能) }

  • 方法2:

function 函数名() { 函数体(一堆命令的集合,来实现某个功能) echo hello echo world }

3. 函数应用

1.两个数字求和

通过sum () {}定义函数
使用read命令交互输入两个数并求和

[root@server2 ~]# vi sum.sh
[root@server2 ~]# chmod +x sum.sh 
[root@server2 ~]# ./sum.sh 
#!/bin/bash
# 函数求和
sum(){                             函数体
  read -p "输入的第一个数:" num1     变量1
  read -p "输入的第二个数:" num2     变量2
  echo "你输入的这两个数为 $num1和$num2"
  sum=$(($num1+$num2))
  echo "这两个数的和为:$sum"
}
sum                               调用函数

在这里插入图片描述

正则表达式

正则表达式(Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。

正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。

支持正则表达式的程序如:locate |find| vim| grep| sed |awk

1. 正则当中名词解释

  • 元字符

指那些在正则表达式中具有特殊意义的专用字符,如:点(.) 星(*) 问号(?)等

  • 前导字符

位于元字符前面的字符. abc* aooo.

2. 第一类正则表达式

(1)正则中普通常用的元字符

在这里插入图片描述

(2)正则中其他常用元字符

在这里插入图片描述

(3)扩展类正则常用元字符

在这里插入图片描述

正则应用

1.grep

-n:表示显示行号
-i:表示不区分大小写
-v:表示反向过滤
[ ]: 查找集合字符

  • 用法示例:
[root@server2 ~]# grep -n 'the' test.txt       过滤包含the的内容

在这里插入图片描述

[root@server2 ~]# grep -vn 'the' test.txt    过滤不包含the的内容  

在这里插入图片描述

2.sed

定义

sed (Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除替换,添加,移动等),最后输出所有行或者仅输出处理的某些行。

工作流程

1.读取:sed 从输入流(文件,管道,标准输入)中读取一行内容并存储到临时的缓存区中(又称模式空间,pattern space)。

2.执行:默认情况下。所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。

3.显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,由此输入的文件并不会发生任何变化,除非是用重定向存储输出。

  • 常见是sed命令选项主要包含以下几种:

-e script(脚本命令) : 指定sed编辑命令
-f scriptfile(文件) : 指定的文件中是sed编辑命令
-h 或 --help :显示帮助
-n,–quiet 或 silent :表示仅显示处理后的结果
-i :直接编辑文本文件(会对文件产生变化)

  • 常见的操作包括以下几种:

a: 增加,在当前行下面增加一行指定内容
c:替换,将选定行替换为指定内容
d:删除,删除选定的行
i:插入,在选定行上面插入一行指定内容
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。(输出)
s:替换,替换指定字符
y:字符转换

  • 用法示例:
[root@server2 ~]# nl test.txt | sed -n 'p'   带行号输出所有内容 等同于 cat test.txt

在这里插入图片描述

[root@server2 ~]# nl test.txt | sed -n '4p'        输出第4行,或者35[root@server2 ~]# nl test.txt | sed -n '3,5p

在这里插入图片描述

Web服务搭建

要求如下:

1.用户输入web服务器的IP、域名以及数据根目录
2.如果用户不输入则一直提示输入,直到输入为止
3.当访问www.test.cc时可以访问到数据根目录里的首页文件“this is test page”

#!/bin/bash
conf=/etc/httpd/conf/httpd.conf
input_fun()
{
  input_var=""
  output_var=$1
  while [ -z $input_var ]
	do
	read -p "$output_var" input_var
	done
	echo $input_var
}
ipaddr=$(input_fun "Input Host ip[192.168.0.1]:")
web_host_name=$(input_fun "Input VirtualHostName [www.test.cc]:")
root_dir=$(input_fun "Input host Documentroot dir:[/var/www/html]:")

[ ! -d $root_dir ] && mkdir -p $root_dir
chown apache.apache $root_dir && chmod 755 $root_dir
echo this is $web_host_name > $root_dir/index.html
echo "$ipaddr $web_host_name" >> /etc/hosts

[ -f $conf ] && cat >> $conf <<end
NameVirtualHost $ipaddr:80
<VirtualHost $ipaddr:80>
	ServerAdmin webmaster@$web_host_name
	DocumentRoot $root_dir
	ServerName $web_host_name
	ErrorLog logs/$web_host_name-error_log
	CustomLog logs/$web_host_name-access_loh common
</VirtualHost>
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值