函数及正则
函数
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行,或者3到5行
[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