变量与web中间件

1.1 类型

环境变量:linux内置的变量
自定义变量:用户自己定义的的变量
位置变量:用于向脚本/函数传递参数

1.2 环境变量

一般环境变量都是大写的
  set
  env
PATH:定义搜索命令的路径
USER:当前用户的用户名
HOME:当前用户的家目录
PS1:当前用户的提示符
PS2:当前用户的续行符
SHELL:当前用户的shell类型
UID:当前用户的uid
环境变量配置文件
用户环境变量配置文件
在用户家目录下,.bashrc .bash_profile
系统环境变量配置文件
/etc下,bashrc 和 profile
修改环境变量
临时:
修改PATH变量,将tmp添加到path变量中
export PATH=$PATH:/tmp/
永久:
修改环境变量配置文件
vim /etc/bashrc
最后添加一行
export PATH=$PATH:/home
让当前会话生效
source /etc/bashrc

1.3 位置变量

位置变量,也称之为位置参数
作用是用于向函数或者向脚本传递参数的
接收数据的位置变量是
   $0 $1 $2 $3 $$ $#
$# 参数的个数
$0 脚本名称
$1..... 第几个参数
案例
#!/bin/bash
if [ $# -ne 3 ];then
echo "error. 参数错误"
echo "Usage:$0 姓名 年龄 性别"
exit 3
fi
echo "程序开始执行...."
echo "姓名是:$1"
echo "年龄是: $2"
echo "性别是:$3"
echo "脚本名称是:$0"
echo "脚本参数个数:$#"
执行脚本
[root@localhost tmp]# ./6.sh tom 18 male
程序开始执行....
姓名是:tom
年龄是: 18
性别是:male
脚本名称是:./6.sh
脚本参数个数:3
案例:通过函数,判断两个数字的大小,输出较大的数字
#!/bin/bash
read -p "请输入数值1:" num1
read -p "请输入数值2:" num2
fun1()
{
m=$1
n=$2
if [ $m -ge $n ];
echo "$m"
else
echo "$n"
fi
}
fun1 $num1 $num2

2.1awk进阶

什么awk
linux中重要的 文本处理工具
linux三剑客之一
处理的对象可以是一个具体的文件,也可以是一个命令的执行结果
grep "xxx" file cat file | grep "xxx"
awk "xxx" file cat file | awk "xxx"
逐行处理目标文件
举例:获取系统中每个用户的uid
# 方法1
[root@ansible tmp]# cat /etc/passwd | awk -F ":" '{print $3}'
# 方法2
[root@ansible tmp]# awk -F ":" '{print $3}' /etc/passwd
显示root用户的家目录
# 方法1
[root@test ~]# head -n1 /etc/passwd | awk -F ":" '{print $6}'
# 方法2
[root@test ~]# grep "^root\>" /etc/passwd | awk -F ":" '{print $6}'
awk的基本格式
awk [选项] '模式{动作}' 文件
模式:在处理一行之前先要判断的条件
      如果条件满足,就处理这行,否则,直接开始读取下一行
      如果不设置条件,则处理文件中的每一行
动作:模式中的条件在满足的情况,对这行内容执行的操作
    选项:
-F “分隔符”:用什么字符将这行内容分成一段一段
记录:一行就是一条记录
字段:一列就是一个字段
分隔符:分隔符就是将记录分割成若干个字段
变量
FS:表示字段分隔符(默认是任何空格)
NF:表示字段数(当前这个记录中的字段的个数)
NR:表示记录数,在执行过程中对应于当前的行号
OFS:表示输出域分隔符
ORS:表示输出记录分隔符(默认值是一个换行符)
RS:表示记录分隔符(默认是一个换行符)
awk用来表示每一段的方法
$1:第一个字段
$2:第二个字段
$3:第三个字段
$NF:表示每行的最后一个字段
$0:表示一整行
案例:获取每行的最后一个字段
[root@ansible tmp]# awk -F "/" '{print $NF}' passwd

案例:显示系统中的全部用户名

[root@ansible tmp]# awk -F ":" '{print $1}' /etc/passwd

案例:显示系统中的前三个用户

[root@ansible tmp]# awk -F ":" 'NR<=3{print $1}' /etc/passwd
root
bin
daemon

NR【Number of Record】:awk的内置变量,表示正在读取的是第几条记录

当读取第一行内容的时候,NR的值是1;当读取第二行的时候,NR的值是2,依次类推
每读取一行内容,NR的值自动加1
概念:
记录(record) :文件中的一行就是一条记录
awk在工作的时候,每次会读取一条记录
每读取一条,NR值加1
分隔符(field separator) :指定用什么来将这个记录分成一段一段的
数字  字母  符号
空格,默认是以空格为分隔符【可以省略-F】
字段(field) :一行被分成的每个部分是一个字段
案例:仅显示/etc/passwd中的第三行内容
[root@ansible tmp]# awk -F ":" 'NR==3{print $0}' /etc/passwd 1

案例:输出系统中每个用户的姓名以及对应的shell类型

[root@ansible tmp]# awk -F ":" '{print $1," shell is ",$NF}' /etc/passwd 1

输出多个字段的情况下,多个字段用逗号分隔即

变量
FS:表示字段分隔符(默认是任何空格)
NF:表示字段数(当前这个记录中的字段的个数)
NR:表示记录数,在执行过程中对应于当前的行号
OFS:表示输出域分隔符
ORS:表示输出记录分隔符(默认值是一个换行符)
RS:表示记录分隔符(默认是一个换行符)
[root@test ~]# cat mypwd | awk -F ":" '{print "第",NR,"个用户是",$1}'
第 1 个用户是 root
第 2 个用户是 bin
第 3 个用户是 daemon
第 4 个用户是 adm
第 5 个用户是 lp
第 6 个用户是 sync
第 7 个用户是 shutdown
第 8 个用户是 halt
第 9 个用户是 mail
第 10 个用户是 operator
1)输出3-5行的用户姓名、和shell类型
# 方法1
[root@ansible tmp]# awk -F ":" 'NR>=3&&NR<=5{print $1,$NF}' /etc/passwd
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin

# 方法2:
[root@ansible tmp]# head -n5 /etc/passwd | tail -n3 | awk -F ":" '{print $1,$NF}'
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
2)输出全部用户的用户名和uid
[root@ansible tmp]# awk -F ":" '{print $1,$3}' /etc/passwd
3)获取ens33的ip地址
# 方法1
[root@ansible tmp]# ip addr show ens33 | grep "inet\>" | awk -F " " '{print $2}' |
awk -F "/" '{print $1}'
192.168.1.63
# 方法2
[root@ansible tmp]# ip addr show ens33 | awk -F " " 'NR==3{print $2}' | awk -F "/"
'{print $1}'
192.168.1.63
# 方法3
[root@ansible tmp]# ip addr show ens33 | awk -F "[/ ]+" 'NR==3{print $3}'
192.168.1.63
4)统计/tmp/a.txt中每行有多少个单词
[root@ansible tmp]# awk -F " " '{print "第",NR,"行有",NF,"单词"}' /tmp/a.txt
第 1 行有 3 单词
第 2 行有 4 单词
第 3 行有 5 单词
第 4 行有 3 单词
第 5 行有 8 单词
awk数组
变量:一个变量只能存储一个值
name=tom
age=20
数组:一组相同数据类型的集合
userList = [‘tom’,'jerry','bajie','wukong']
三个概念
数组名
数组的索引
数组的索引对应的值
定义数组:
数组名[索引]=值
案例:
数组名:userlist
定义数组元素和值:
userlist[1]=tom
userlist[2]=jerry
userlist[3]=bok
userlist[4]=bajie
userInfo["name"]="tom"
userInfo["age"]=33
userInfo["addr"]="'hebei'"
获取数组中的值
userlist[2]
userInfo["name"]
数组的索引
数字,数字索引的变号是从0开始
字母
字符串
[root@ansible tmp]# awk 'BEGIN{stu[0]="tom";stu[1]="jerry";stu[2]="jack";print
stu[1]}'
jerry
[root@ansible tmp]# awk 'BEGIN{stu[0]="tom";stu[1]="jerry";stu[2]="jack";print
stu[2]}'
jack
[root@ansible tmp]# awk
'BEGIN{stu["name"]="tom";stu["age"]="20";stu["tel"]="13011111";print stu["age"]}'
20
[root@ansible tmp]# awk
'BEGIN{stu["name"]="tom";stu["age"]="20";stu["tel"]="13011111";print stu["tel"]}'
13011111

数组的循环遍历

格式:for(变量 in 数组名)
变量中存储的是属组的索引
[root@test ~]# awk
'BEGIN{userList[0]="tom";userList[1]="jerry";userList[2]="jack"}\
END{for(var in userList) print "第",var+1,"个用户是",userList[var]}' mypwd
第 1 个用户是 tom
第 2 个用户是 jerry
第 3 个用户是 jack
[root@test ~]# awk
'BEGIN{info["name"]="tom";info["age"]=25;info["addr"]="beijing"}\
END{for(var in info) print var, "is" , info[var]}' mypwd
age is 25
addr is beijing
name is tom
[root@test ~]# awk
'BEGIN{info["www.baidu.com"]=5;info["ftp.baidu.com"]=11;info["mail.baidu.com"]=9;in
fo["cdn.baidu.com"]=23}END{for(var in info) print var, "is" , info[var]}' mypwd
ftp.baidu.com is 11
cdn.baidu.com is 23
www.baidu.com is 5
mail.baidu.com is 9

3,web中间件

apache
nginx
lamp/lnmp

3.1 中间件简介

中间件:软件,作用是接收客户端同浏览器发送过来的http请求,并且给客户端返回一个结果
常见的中间件:
nginx
apache
tomcat
weblogic
tengine
iis - windows 服务器

3.2 http协议

http
http协议:Hyper Text Transfor Protocol
作用:让用户通过浏览器发送请求到服务器端,并且接收客户端返回过来的数据,最后在浏览器展示出来
http请求报文格式
格式
第一行:请求行
第二行-空白行:请求头
空白行下面:请求体
请求行的格式:
第一部分:请求方法
1)GET
2) POST
...
第二部分:请求url
第三部分:使用的http协议版本号
http 0.9
http 1.0
http 1.1
请求头的内容
Host:指定目标网站的域名或者是IP地址
Connection:当前客户端的链接状态
User-Agent:指定客户端访问网站时候使用的浏览器
refer:表示当前这个请求是直接访问过来的,还是从其他的网站跳转过来的
http请求响应格式
格式
第一行:响应行
第二行-空白行:响应头
空白行下面:响应体
响应行的格式
第一部分:http协议版本号
第二部分:客户端这次请求的状态码。这个状态码可以判断这次客户端的请求是成功还是失败
第三部分:状态码对应的消息短语
状态码
1xx
作用:提示信息
2xx
作用:表示客户端的本次请求是成功的
200 ok
3xx
作用:表示客户端本次请求被重定向到了其他的地址
301 永久重定向
302 临时重定向
304 表示数据来自于缓存
4xx
作用:表示客户端的本次请求是成功的【客户端原因】
403 forbidden
第一种可能:客户端所请求的文件,无权查看
第二种可能:客户端没有指定要访问哪个文件,于此同时服务器默认要展示给用户的文
件不存在也会报错403
404 not found:客户端所访问的页面不存咋的
5xx
作用:表示客户端的本次请求是成功的【服务器端原因】
500
501
502
浏览器的开发者工具可以看到数据包的三种首部
请求首部
响应首部
通用首部

http协议的格式
http://域名:端口号/路径/文件名
端口号:默认是80


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值