shell(3):文本处理、基本语法和脚本编写
一、awk、变量、运算符、if多分支
awk:shell编辑器的一种文本处理工具/命令,同grep、sed一样均可解释正则。具体运用下面awk文本处理有详细说明。
变量:分为系统变量和临时变量。变量一般由字母,下划线_ 开头,其他部分由字母、下划线、数字组成。
运算符
1.算术运算符:加+ 减- 乘* 除/ 取余% 2.关系操作符:大于> 小于< 大于等于>= 小于等于<= 等于== 不等于!= 与&& 或|| 3.赋值运算符:赋值= +=:x=x+1等同于x+=1 *=:x=x*1等同于x*=1 /=:x=x/2等同于x/=2 %=:例如NR%2=1 4.shell计算器:$(()) expr bc -l 5.测试操作
if多分支
if+条件,then+命令。elif+条件,then+命令。elif可以有0个或多个。else +命令。可一有0个或一个。fi 。
二、awk文本处理
1.打印uid在30~40范围内的用户名。
cd /etc/passwd #查看具体的信息数据
awk -F : '$3 >= 30 && $3 <= 40{print $1}' /etc/passwd #$3: 以“:”为分隔符的第三段内容。
因为没有30行所以操作未成功
echo $? #测试命令是否成功
2.打印第5-10行的行号和用户名
awk -F : 'NR>=5&&NR<=10 {print NR,$1}' /etc/passwd #NR代表行号,$1 :以“:”为分隔符的第一段内容。
3.打印奇数行用户名
awk -F : 'NR%2==1 {print NR "----" $1}' /etc/passwd
4.打印偶数行用户名
awk -F : 'NR%2!=1 {print NR,"----", $1}' /etc/passwd
5.打印字段数大于5的行的用户名
awk -F : '$1>=5 {print NR,$1}' /etc/passwd
6.打印UID不等于GID的用户名
awk -F: '$3!=$4 {print NR,$1}' /etc/passwd #UID在第三段,GID在第四段。
7.打印没有指定shell的用户
awk -F: '$7!="/bin/bash" {print NR,$1}' /etc/passwd
三、shell脚本编写
1.自动部署、初始配置、并启动nginx反向代理服务
#!/bin/bash echo '开始安装........' yum install epel-release -y yum install nginx -y echo '更改配置...........' a="/etc/nginx/nginx.conf " echo '添加三台代理服务器IP地址.......' sed -i "17a upstream app {" $a read -p "输入第一台服务器IP地址: " IP1 sed -i "18a server $IP1;}" $a read -p "输入第二台服务器IP地址: " IP2 sed -i "18a server $IP2;" $a read -p "输入第三台服务器IP地址: " IP3 sed -i "18a server $IP3;" $a c="proxy_pass http://app;" sed -i "51a $c" $a echo "配置完成,启动服务............" systemctl start nginx
后期可以使用for循环来简化流程。
2.自动部署、初始配置、并启动三台web
#!/bin/bash echo '开始安装........' yum install epel-release -y yum install nginx -y echo '初始化配置.......' echo '启动服务........' systemctl start nginx
配置IP地址为上面设置好的。
3.监控脚本:监控每台机器的内存使用率>70%,则输出报警信息
安装软件bc
free #查看内存使用参数,vim b.sh #编辑脚本
#!/bin/bash while : do a=`free |awk 'NR==2{print $3/$2}'` b=`echo "scale=2;$a/1"|bc|sed "s/\.//"` echo '当前内存使用率:'$b% (($b>70)) && echo '内存使用过高!!!!!' sleep 2 done