shell脚本编程

导语:
shell 就是一个用户跟操作系统之间的一个命令解释器。Linux Shell 种类非常多,不同的 Shell 语言的语法有所不同,所以不能交换使用。最常用的 shell 是 Bash,也就是 Bourne Again Shell ,由于易用和免费,不同的 Shell 语言的语法有所不同,所以不能交换使用。
好记性不如烂笔头,特作总结!

1.第一个程序:helloworld.sh

#!/bin/bash // 表示定义该脚本是一个 shell 脚本(固定格式)。
#This is my First  shell // 这里的#号属于注解,没有任何的意义,SHELL不会解析它。
echo “Hello World ! ” //shell 脚本主命令,我们执行这个脚本讲看到 : Hello World !  信息。
赋予执行权限:
chmod o+x first_shell.sh  然后./first_shell.sh 执行即可 ; 也可以直接使用命令执行 : /bin/sh first_shell.sh ,显示效果一样

2.变量

(1)赋值=
SHELL变量可分为两类:局部变量和环境变量
        局部变量只在创建它们的 shell 脚本中使用。而环境变量则可以在创建它们的 shell及其派生出来的任意子进程中使用。 有些变量是用户创建的, 其他的则是专用 shell 变量。
            例如在脚本里面定义 A=123 , 定义这样一个变量,前面变量名,后面是变量的值。
SHELL常见的系统变量解析 :
$0 当前程序的名称
$n 当前程序的第 n 个参数 ,n=1,2, , 9
$* 当前程序的所有参数 ( 不包括程序本身 )
$# 当前程序的参数个数 ( 不包括程序本身 )
$? 命令或程序执行完后的状态,一般返回 0 表示执行成功。
$UID 当前用户的 ID
$PWD 当前所在的目录

文字颜色设定:echo -e '\033[32m--*#?--\033[0m'

3.shell编程---流程控制 4 大剑客: if 、for 、while 、case(略)

(1)if应用
一,测试数字大小:&获取变量的地址

二,测试目录是否存在,不存在则新建;注意,中括号之间必须要空格

       逻辑运算符解析:
-f     判断文件是否存在 eg: if [ -f filename ]
-d    判断目录是否存在 eg: if [ -d dir ]
-eq  等于 应用于:整型比较
-ne  不等于 应用于:整型比较
-lt    小于 应用于:整型比较
-gt   大于 应用于:整型比较
-le   小于或等于 应用于:整型比较
-ge  大于或等于 应用于:整型比较
-a    双方都成立( and) 逻辑表达式 –a 逻辑表达式
-o    单方成立( or) 逻辑表达式 –o 逻辑表达式
-z    空字符
 


三,多个条件测试判断

4.shell编程   文本操作 4大金刚-sed,awk,Find,Grep

四大“金刚”对shell编程,可称之为左膀右臂;帮助很大

+++++++++++++sed--依照脚本的指令来处理、编辑文本文件+++++++++++++++++++++++++++++++
替换关键字


行头填充操作


插入操作

打印具体行

sed 应用实例-最最大和最小数据

++++grep--是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行++++++++++
Unix的grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDSTR
匹配关键字

匹配头尾

匹配特征字

grep 实例---查ip--cat test.log |grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}"


grep-应用

++++++awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大+++
按符号分列-并筛选出具体列
案例-打印Linux中的ip信息-练习awk


打印磁盘大小--awk第五列

打印任何一列的参数:

awk-BEGIN的使用
awk 'BEGIN{OFS=FS=":"}           #将输出和输入分隔符设置为冒号
   NR==FNR{a[$1]=$2}        #NR=FNR表示读取第一个文件的每行时,a[$1]=$2"表示设置一个数组元素a[行的首列]=行第二列
   NR>FNR{$2=a[$1]; #"NR>FNR"当然就表示读取第二个文件(2.txt)每行时,将该行的第二列替换为之前建立的数组中对应的元素
   print
}' 1.txt 2.txt

用例:开发系统监控脚本

■ 企业环境说明
● 某公司随着业务的不断发展,所使用的Linux服务器也越来越多。管理员希望编写一个简单的性能监控脚本,放到各服务器中,当监控指标出现异常时发送告警邮件
■ 需求描述
● 编写名为sysmon.sh的Shell|监控脚本
● 监控内容包括CPU使用率、内存使用率、根分区的磁盘占用率
● 百分比只需精确到个位,如7%、 12%、23%等
● 出现以下任一-情况时告警:磁盘占用率超过90%、CPU使用率超过80%、内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱
● 结合crond服务,每半小时执行一次监控脚本
■ 脚本编程
● 磁盘占有率

[root@client1 ~]# df -Th| grep ' /$'      
[root@client1 ~]# df -Th | grep '/$'| awk '{print $6}      
[root@client1 ~]# df -Th| grep '/$'| awk '{print $6}' | awk -F% '{print $1} '      
[root@client1 ~]# disk=$(df -Th | grep '/$ ' | awk ' {print $6}'| awk -F% ' {print $1}')

● CPU使用率

[rootaclient1 ~]# mpstat      
[root@client1 ~]# mpstat| tail -1| awk '{print $12}'      
[root@client1 ~]# mpstat| tail -1| awk '{print $12}'| awk -F. '{print $1}      
[root@client1 ~]# expr 100 - $ (mpstat| tail -1| awk -F. '{print $1}')      
[root@client1 ~]# CPU=$(expr 100  - $ (mpstat| tail -1| awk ' {print $12}' | awk -F. '{print $1}'))

● 内存使用率

[root@client1~]# free -m       
[root@client1~]# free -m | grep  "Mem:"  | awk '{print $7}'       
[root@client1~]# free -m | grep  "Mem:"  | awk ' {print $2} '       
[root@client1 ~]# expr $(free -m| grep "Mem:"| awk ' {print $7}') / $(free -m| grep "Mem :"  |awk '{print $2}')       
[root@client1 ~]# expr $(free -m| grep "Mem:"| awk ' {print $7}') \* 100 / $(free -m | grep "Men:" | awk '{print  $2}')       
mem=$(expr $(free -m| grep "Mem: "  | awk ' {print $7}') \* 100 / $(free -m | grep "Men:" | awk '{print $2}'))

● 配置文件

[root@client1~]# rpm -qa mailx        
mailx-12.5-16.el7.x86 64        
[root@client1 ~]# vi /etc/mail.rc        
[root@client1 ~]# echo” 122333"| mail -S "test" ***********        
set from********* @qq.com                  // 发送邮箱地址        
set smtp=smtp.qq.com                        // 邮箱使用的smtp服务器的域名        
set smtp - auth -user=*********@qq.com                        
set smtp- auth -password........              // 获取授权码        
set smtp -auth=login                             // smtp的状态,登录状态

● 编辑配置告警脚本

[root@client1 ~]# vim sys. sh        
[root@client1 ~]# chmod +x sys. sh        
[root@client1 ~]# ./ sys. sh 
#!/bin/bash
# 磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%告警发送邮件
disk=$(df -Th | grep '/$' | awk '{print $6}' | awk -F% '{print $1}')
CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
mem=$(expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}'))
A=/root/alert.txt
B=*************@qq.com
if[ $disk -ge 90 ]
then echo "磁盘占有率超过90%" >> $A
fi
if[ $CPU -ge 80 ]
then echo "CPU使用率超过80%" >> $A
fi
if[ $mem -ge 90 ]
then echo "内存使用率超过90%" >> $A
fi
if[ -f $A ]
then
cat $A | mail -s "alert report" $B
rm -rf $A
fi

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxilang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值