第一篇:人人都能学会的企业SHELL编程v2
人人都能学会的SHELL编程
目 录
1.Shell入门简介.......................................................................................................2 2.Shell编程之变量详解...........................................................................................5 3.If条件语句学习.....................................................................................................8 4.使用if条件语句编写MySQL备份脚本..............................................................10 5.IF条件综合Shell实战脚本编写.......................................................................11 6.循环语句for.........................................................................................................20 7.循环语句while.....................................................................................................22 8.Until循环语句.....................................................................................................23 9.Case选择语句.......................................................................................................23 10.select选择语句.................................................................................................25 11.Shell编程函数讲解...........................................................................................25 12.Shell数组编程...................................................................................................27 13.Shell编程之awk、sed命令案例分析.............................................................30 14.全备和增量备份Linux系统脚本......................................................................31 15.Shell编程之系统硬件信息数据库收集...........................................................34 16.Shell编程之磁盘报警高级脚本.......................................................................37 17.Shell编程之服务监控检查脚本.......................................................................40 18.Shell编程之实战WEB界面展示一...................................................................40 19.Shell编程之实战WEB界面展示二...................................................................40 20.Shell编程之学习心得分享及拓展...................................................................40
1.Shell入门简介
说到Shell编程,我想很多从事Linux运维工作的朋友都不陌生,都对Shell有基本的了解,可能大家刚开始接触Shell的时候,有各种想法? 能不能不学? 高大上?
到底是浮云?还是神马?
很难啊?
我想告诉大家的是,大家有这些想法一点都不觉得惊讶,为什么?这些都很正常,对于任何一件事情在未开始之前,肯定会有总总假设,那我今天想说的是,学完人人都会Shell编程后,我们会觉得一切的Shell都是浮云,我们每个人都能很好的使用它,驾驭它,更好的完成我们日常运维的工作。
曾经有人说过,玩Linux不知道Shell,那就是不懂Linux;现在细细品味确实是这样。为了让更多的人能接触Shell、了解Shell,使用Shell,所以今天开设了这样一个网络课程,让我们的Shell飞起来。
好的,其他不多说了,我们正式进入主题,什么是Shell呢? Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。
Shell是用户与Linux操作系统之间沟通的桥梁。用户可以输入命令执行,又可以利用 Shell脚本编程去运行。
Linux Shell种类非常多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不同的Shell语言的语法有所不同,所以不能交换使用。
最常用的shell是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用,也是大多数Linux系统默认的Shell。接下来我们来写一个简单的shell脚本。(shell脚本一般文件名以.sh结尾,同时文件第一行定义该脚本为shell脚本)vi first_shell.sh #!/bin/bash #This is my First shell echo “Hello World!”
这就是我们的第一个脚本,是不是很简单呢,注解如下:
#!/bin/bash //表示定义该脚本是一个shell脚本(固定格式)。#This is my First shell //这里的#号属于注解,没有任何的意义,SHELL不会解析它。
echo “Hello World!” //shell脚本主命令,我们执行这个脚本讲看到: Hello World!信息。
脚本编写完毕,如何来执行呢,首先执行shell脚本需要执行权限,赋予执行权限:
chmod o+x first_shell.sh 然后./first_shell.sh执行即可;也可以直接使用命令执行: /bin/sh first_shell.sh,显示效果一样。2.Shell编程之变量详解
Shell编程语言是非类型的解释型语言,不像C++/JAVA语言编程时需要事先声明变量,SHELL给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。SHELL变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell脚本中使用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。
例如在脚本里面定义A=123 ,定义这样一个变量,前面变量名,后面是变量的值。
引用变量可以使用$A,把变量放在脚本里面会出现什么样的效果呢?如下: #!/bin/bash #Author wugk 2014-06-10 A=123 echo “Printf variables equal is $A” 执行脚本:sh test.sh,结果将会显示: Printf variables equal is 123 简单的理解变量,相当于定义一个别名-名称,引用的时候加上$符号就可以了。
例如定义变量 name=wuguangke 执行echo $name 将会显示wuguangke SHELL常见的系统变量解析: $0 当前程序的名称
$n 当前程序的第n个参数,n=1,2,„9 $* 当前程序的所有参数(不包括程序本身)$# 当前程序的参数个数(不包括程序本身)$? 命令或程序执行完后的状态,一般返回0表示执行成功。$UID 当前用户的ID $PWD 当前所在的目录
我们来测试一个常用变量的脚本:vi auto_var.sh #!/bin/bash #auto print variables #by wugk 2014-09 echo-e ' 33[32m----------------------------- 33[0m' echo “This is $0 param!” echo “This $1 is $1 param!” echo “This $2 is $2 param!” echo-e ' 33[32m----------------------------- 33[0m' echo “This $* is $* param!” echo “This $# is $# param!” echo “This $? is $? param!” echo
紧接着我们来编写一个简单的echo打印菜单: #!/bin/bash #auto install httpd #by wugk 2014-09 echo-e ' 33[32m----------------------------- 33[0m' FILES=httpd-2.2.17.tar.bz2 URL=http://mirrors.cnnic.cn/apache/httpd/ PREFIX=/usr/local/apache2/ echo-e “ 33[36mPlease Select Install Menu: 33[0m” echo echo “1)官方下载Httpd文件包.” echo “2)解压apache源码包.” echo “3)编译安装Httpd服务器.” echo “4)启动HTTPD服务器.” echo-e ' 33[32m----------------------------- 33[0m' sleep 20
3.If条件语句学习
在Linux Shell编程中,if、for、while、case等条件流程控制语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。下面将逐个来讲解具体的用法: If条件判断语句
if(表达式)#if(Variable in Array)语句1 else 语句2 fi 案例一,测试数字大小 #!/bin/sh NUM=100 if(($NUM > 4));then echo “this num is $NUM greater 4!” fi 案例二,测试目录是否存在,不存在则新建(注意,中括号之间必须要空格)#!/bin/sh #judge dir exist if [!-d /data/20140515 ];then mkdir-p /data/20140515 else echo “This DIR is exist,Please exit „..” fi 逻辑运算符解析:
-f 判断文件是否存在 eg: if [-f filename ]-d 判断目录是否存在 eg: if [-d dir ]-eq 等于 应用于:整型比较-ne 不等于 应用于:整型比较-lt 小于 应用于:整型比较-gt 大于 应用于:整型比较-le 小于或等于 应用于:整型比较-ge 大于或等于 应用于:整型比较
-a 双方都成立(and)逻辑表达式 –a 逻辑表达式-o 单方成立(or)逻辑表达式 –o 逻辑表达式-z 空字符串
案例三,多个条件测试判断 #!/bin/sh scores=80 if [[ $scores-gt 85 ]];then echo “very good!”;elif [[ $scores-gt 75 ]];then echo “good!”;elif [[ $scores-gt 60 ]];then echo “pass!”;else echo “no pass!” fi 4.使用if条件语句编写MySQL备份脚本 a)自动备份Mysql数据库脚本 #!/bin/sh #auto backup mysql #wugk 2012-12-12 #Define PATH定义变量
BAKDIR=/data/backup/mysql/`date +%Y-%m-%d` MYSQLDB=webapp MYSQLPW=backup MYSQLUSR=backup #must use root user run scripts 必须使用root用户运行,$UID为系统变量 if
[ $UID-ne 0 ];then echo This script must use the root user!!sleep 2 exit 0 fi #Define DIR and mkdir DIR 判断目录是否存在,不存在则新建 if [!-d $BAKDIR ];then mkdir-p $BAKDIR else echo This is $BAKDIR exists....fi #Use mysqldump backup mysql 使用mysqldump备份数据库 /usr/bin/mysqldump-u$MYSQLUSR-p$MYSQLPW-d $MYSQLDB >$BAKDIR/webapp_db.sql echo “The mysql backup successfully ” 5.IF条件综合Shell实战脚本编写
通过if语句和之前变量的学习,今天我们将把我们所学的综合在一起来讲解一个实战运维脚本,一键安装LAMP环境的脚本: 一键源码安装LAMP脚本,先分解脚本的各个功能: 打印菜单:
1)安装apache WEB服务器 2)安装Mysql DB服务器 3)安装PHP 服务器
4)整合LAMP架构并启动服务
1、Apache服务器安装部署。
下载httpd-2.2.27.tar.gz版本,下载URL,解压,进入安装目录,configure;make;make install
2、Mysql服务器的安装。
下载mysql-5.5.20.tar.bz2版本,下载URL,解压,进入安装目录,configure;make;make install
3、PHP服务器安装。
下载php-5.3.8.tar.bz2版本,下载URL,解压,进入安装目录,configure;make;make install
4、LAMP架构的整合和服务启动。
/usr/local/apache2/bin/apachectl start vi htdocs/index.php vi auto_lamp.sh内容如下: #!/bin/bash #auto install LAMP #by wugk 2014-11 #Httpd define path variable H_FILES=httpd-2.2.27.tar.bz2 H_FILES_DIR=httpd-2.2.27 H_URL=http://mirrors.cnnic.cn/apache/httpd/ H_PREFIX=/usr/local/apache2/
#MySQL define path variable M_FILES=mysql-5.5.20.tar.gz M_FILES_DIR=mysql-5.5.20 M_URL=http://down1.chinaunix.net/distfiles/ M_PREFIX=/usr/local/mysql/
#PHP define path variable P_FILES=php-5.3.28.tar.bz2 P_FILES_DIR=php-5.3.28 P_URL=http://mirrors.sohu.com/php/ P_PREFIX=/usr/local/php5/ echo-e ' 33[32m----------------------------- 33[0m' echo
if [-z “$1” ];then
echo-e “ 33[36mPlease Select Install Menu follow: 33[0m” echo-e “ 33[32m1)编译安装Apache服务器 33[1m” echo “2)编译安装MySQL服务器” echo “3)编译安装PHP服务器” echo “4)配置index.php并启动LAMP服务” echo-e “ 33[31mUsage: { /bin/sh $0 1|2|3|4|help} 33[0m” exit fi
if [[ “$1”-eq “help” ]];then echo-e “ 33[36mPlease Select Install Menu follow: 33[0m” echo-e “ 33[32m1)编译安装Apache服务器 33[1m” echo “2)编译安装MySQL服务器” echo “3)编译安装PHP服务器” echo “4)配置index.php并启动LAMP服务” echo-e “ 33[31mUsage: { /bin/sh $0 1|2|3|4|help} 33[0m” exit fi
### #Install httpd web server if [[ “$1”-eq “1” ]];then
wget-c $H_URL/$H_FILES && tar-jxvf $H_FILES && cd $H_FILES_DIR &&./configure--prefix=$H_PREFIX if [ $?-eq 0 ];then
make && make install
echo-e “n 33[32m---------------- 33[0m”
echo-e “ 33[32mThe $H_FILES_DIR Server Install Success! 33[0m” else
echo-e “ 33[32mThe $H_FILES_DIR Make or Make install ERROR,Please Check......”
exit 0 fi fi
#Install Mysql DB server if [[ “$1”-eq “2” ]];then
wget-c $M_URL/$M_FILES && tar-xzvf $M_FILES && cd $M_FILES_DIR &&yum install cmake-y;cmake.-DCMAKE_INSTALL_PREFIX=$M_PREFIX-DMYSQL_UNIX_ADDR=/tmp/mysql.sock-DMYSQL_DATADIR=/data/mysql-DSYSCONFDIR=/etc-DMYSQL_USER=mysql-DMYSQL_TCP_PORT=3306-DWITH_XTRADB_STORAGE_ENGINE=1-DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_PARTITION_STORAGE_ENGINE=1-DWITH_BLACKHOLE_STORAGE_ENGINE=1-DWITH_MYISAM_STORAGE_ENGINE=1-DWITH_READLINE=1-DENABLED_LOCAL_INFILE=1-DWITH_EXTRA_CHARSETS=1-DDEFAULT_CHARSET=utf8-DDEFAULT_COLLATION=utf8_general_ci-DEXTRA_CHARSETS=all-DWITH_BIG_TABLES=1-DWITH_DEBUG=0 make && make install
/bin/cp support-files/my-small.cnf /etc/my.conf /bin/cp support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld chkconfig--add mysqld chkconfig mysqld on
if [ $?-eq 0 ];then make && make install echo-e “n 33[32m---------------- 33[0m” echo-e “ 33[32mThe $M_FILES_DIR Server Install Success! 33[0m” else echo-e “ 33[32mThe $M_FILES_DIR Make or Make install ERROR,Please Check......” exit 0 fi fi
#Install PHP server if [[ “$1”-eq “3” ]];then
wget-c $P_URL/$P_FILES && tar-jxvf $P_FILES && cd $P_FILES_DIR &&./configure--prefix=$P_PREFIX--with-config-file-path=$P_PREFIX/etc--with-mysql=$M_PREFIX--with-apxs2=$H_PREFIX/bin/apxs if [ $?-eq 0 ];then make ZEND_EXTRA_LIBS='-liconv' && make install echo-e “n 33[32m---------------- 33[0m” echo-e “ 33[32mThe $P_FILES_DIR Server Install Success! 33[0m” else echo-e “ 33[32mThe $P_FILES_DIR Make or Make install ERROR,Please Check......” exit 0 fi fi
#
if [[ “$1”-eq “4” ]];then
sed-i '/DirectoryIndex/s/index.html/index.php index.html/g' $H_PREFIX/conf/httpd.conf $H_PREFIX/bin/apachectl restart
echo “AddType application/x-httpd-php.php” >>$H_PREFIX/conf/httpd.conf IP=`ifconfig eth1|grep “Bcast”|awk '{print $2}'|cut-d:-f2` echo “You can access http://$IP/”
cat >$H_PREFIX/htdocs/index.php <
#!/bin/sh for i in `seq 15` do
echo “NUM is $i”
done 案例二,求和1-100的值 #!/bin/bash #auto sum 1 100 j=0 for((i=1;i<=100;i++))do j=`expr $i + $j` done echo $j 案例三,找到相关log,然后批量打包 #!/bin/sh for i in `find /var/log-name “*.log”` do
tar –czf 2014log.tgz $i done 案例四,远程主机批量传输文件: #!/bin/bash #auto scp files for client #by authors wugk 2014 for i in `seq 100 200` do scp-r /tmp/test.txt root@192.168.1.$i:/data/webapps/www.xiexiebang.comnic.cn/apache/httpd/ H_PREFIX=/usr/local/apache2/ function Apache_install(){ #Install httpd web server if [[ “$1”-eq “1” ]];then
wget-c $H_URL/$H_FILES && tar-jxvf $H_FILES && cd $H_FILES_DIR &&./configure--prefix=$H_PREFIX if [ $?-eq 0 ];then
make && make install
echo-e “n 33[32m---------------- 33[0m”
echo-e “ 33[32mThe $H_FILES_DIR Server Install Success! 33[0m” else
echo-e “ 33[32mThe $H_FILES_DIR Make or Make install ERROR,Please Check......”
exit 0 fi fi } Apache_install直接调用函数就会去运行函数里面定义的代码了。12.Shell数组编程
数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。
今天这里我们来探讨一维数组的定义、统计、引用和删除等操作。首先来定义一个一维数组:
A=(test1 test2 test3),定义数组一般以括号的方式来定义,数组的值可以随机定义。如何来引用呢? echo ${A[0]},代表引用第一个数组变量,结果会显示test1,数组引用从0开始,代表第一个数组,依次类推。
echo ${A[1]},代表引用第二个数组变量,结果会显示test2,数组引用也是从0开始计算的。
如何显示该数组所有参数呢?echo ${A[@]} 将显示所有参数test1 test2 test3。
如何显示该数组参数个数呢?echo ${#A[@]} 将显示该数组的参数个数3。
如果替换某个数组呢?例如替换第二个test2数组为test5:echo ${A[@]/test2/test5} 如何删除一个数组呢?例如删除test3数组命令为:unset A[2];echo ${A[@]}查看效果。
那输入如何在编程来使用呢?请看下面例子: #!/bin/sh #Auto Make KVM Virtualization #Auto config bond scripts eth_bond(){ NETWORK=(HWADDR=`ifconfig eth0 |egrep “HWaddr|Bcast” |tr “n” “ ”|awk '{print $5,$7,$NF}'|sed-e 's/addr://g'-e 's/Mask://g'|awk '{print $1}'` IPADDR=`ifconfig eth0 |egrep “HWaddr|Bcast” |tr “n” “ ”|awk '{print $5,$7,$NF}'|sed-e 's/addr://g'-e 's/Mask://g'|awk '{print $2}'` NETMASK=`ifconfig eth0 |egrep “HWaddr|Bcast” |tr “n” “ ”|awk '{print $5,$7,$NF}'|sed-e 's/addr://g'-e 's/Mask://g'|awk '{print $3}'` GATEWAY=`route-n|grep “UG”|awk '{print $2}'`)cat >ifcfg-bond0< 在我们日常的Shell编程中我们会用到很多的一些语句,有的语句,如果用好了,可以让我们的脚本更上一层楼,让我们的功能更容易满足企业的需求。Sed命令: sed 's/192/10/g' test.txt 把文件里面的192字符替换为10 在文件开头或者结尾添加字符: Awk命令: Find命令: Grep正则: 14.全备和增量备份Linux系统脚本 在Linux中,我们经常需要备份系统重要文件,例如/etc、/boot分区、重要网站数据等等,如果每天都完整备份的话,会占用很大的空间,那我们改如何来备份呢? 这里采用如下方法来备份: 每周日进行完整备份,其余每天为增量备份。那使用什么命令来备份呢,我们使用tar命令: 全备份:tar-g /tmp/snapshot-czvf /tmp/2014_full_system_data.tar.gz /data/sh/ 增量备: tar-g /tmp/snapshot-czvf /tmp/2014_add01_system_data.tar.gz /data/sh/ #!/bin/sh #Automatic Backup Linux System Files #Author wugk 2013-11-22 #Define Variable SOURCE_DIR=($*)TARGET_DIR=/data/backup/ YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` WEEK=`date +%u` A_NAME=`date +%H%M` FILES=system_backup.tgz CODE=$? if [-z “$*” ];then echo-e “ 33[32mUsage:nPlease Enter Your Backup Files or Directoriesn-------------nnUsage: { $0 /boot /etc} 33[0m” exit fi #Determine Whether the Target Directory Exists if [!-d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then mkdir-p $TARGET_DIR/$YEAR/$MONTH/$DAY echo-e “ 33[32mThe $TARGET_DIR Created Successfully! 33[0m” fi #EXEC Full_Backup Function Command Full_Backup(){ if [ “$WEEK”-eq “7” ];then rm-rf $TARGET_DIR/snapshot cd $TARGET_DIR/$YEAR/$MONTH/$DAY;tar-g $TARGET_DIR/snapshot-czvf $FILES ${SOURCE_DIR[@]} [ “$CODE” == “0” ]&&echo-e “-------------n 33[32mThese Full_Backup System Files Backup Successfully! 33[0m” fi } #Perform incremental BACKUP Function Command Add_Backup(){ if [ $WEEK-ne “7” ];then cd $TARGET_DIR/$YEAR/$MONTH/$DAY;tar-g $TARGET_DIR/snapshot-czvf $A_NAME$FILES ${SOURCE_DIR[@]} [ “$CODE” == “0” ]&&echo-e “----------n 33[32mThese Add_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Backup Successfully! 33[0m” fi } sleep 3 Full_Backup;Add_Backup 15.Shell编程之系统硬件信息数据库收集 首先我们创建数据库表,格式如下: CREATE TABLE `audit_audit_system`(`id` int(11)NOT NULL AUTO_INCREMENT,`ip_info` varchar(50)NOT NULL,`serv_info` varchar(50)NOT NULL,`cpu_info` varchar(50)NOT NULL,`disk_info` varchar(50)NOT NULL,`mem_info` varchar(50)NOT NULL,`load_info` varchar(50)NOT NULL,`mark_info` varchar(50)NOT NULL,PRIMARY KEY(`id`),UNIQUE KEY `ip_info`(`ip_info`),UNIQUE KEY `ip_info_2`(`ip_info`));然后编写脚本如下: #!/bin/sh #auto get system info #author wugk 2014-08-29 echo-e “ 33[34m 33[1m” cat < ++++++++++++++++++++++++++++++++++++++++++++++ ++++++++Welcome to use system Collect+++++++++ ++++++++++++++++++++++++++++++++++++++++++++++ EOF ip_info=`ifconfig |grep “Bcast”|tail-1 |awk '{print $2}'|cut-d:-f 2` cpu_info1=`cat /proc/cpuinfo |grep 'model name'|tail-1 |awk-F: '{print $2}'|sed 's/^ //g'|awk '{print $1,$3,$4,$NF}'` cpu_info2=`cat /proc/cpuinfo |grep “physical id”|sort |uniq-c|wc-l` serv_info=`hostname |tail-1` disk_info=`fdisk-l|grep “Disk”|grep-v “identifier”|awk '{print $2,$3,$4}'|sed 's/,//g'` mem_info=`free-m |grep “Mem”|awk '{print “Total”,$1,$2“M”}'` load_info=`uptime |awk '{print “Current Load: ”$(NF-2)}'|sed 's/,//g'` mark_info='BeiJing_IDC' echo-e “ 33[32m------------ 33[1m” echo IPADDR:${ip_info} echo HOSTNAME:$serv_info echo CPU_INFO:${cpu_info1} X${cpu_info2} echo DISK_INFO:$disk_info echo MEM_INFO:$mem_info echo LOAD_INFO:$load_info echo-e “ 33[32m------------ 33[0m” echo-e-n “ 33[36mYou want to write the data to the databases? 33[1m”;read ensure if “Y” ];then echo “-------------” [ “$ensure” == “yes”-o “$ensure” == “y”-o “$ensure” == echo-e ' 33[31mmysql-uaudit-p123456-D audit-e ''' “insert into audit_audit_system values('','${ip_info}','$serv_info','${cpu_info1} X${cpu_info2}','$disk_info','$mem_info','$load_info','$mark_info')” ''' 33[0m ' else fi 读取数据库信息: mysql-uroot-p123-e 'use wugk1;select * from audit_audit_system;'|sed 's/-//g'|grep-v “id” 这样,我们可以把数据库的内容在shell脚本里面调用出来。16.Shell编程之磁盘报警高级脚本 echo “wait exit......” exit 脚本分析: 1、磁盘达到85%发送报警邮件。 2、发送邮件命令格式。 3、多个报警设置。 4、把分区的信息写入文件。 Mail-s “邮件主题”-c”抄送地址”-b “密送地址”-f 发送人邮件地址 –F 发件人姓名 < 要发送的邮件内容 #!/bin/sh #auto monitor disk #by authors wugk 2014 echo-e “ 33[31m 33[1m” rm-rf list.txt LIST=`df-h |grep “^/dev/” >>list.txt` cat << EOF +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++welcome to use auto monitor system++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF echo-e “ 33[32m---------------------------- 33[0m” echo sleep 2 while read line do IP_ADDR=`ifconfig eth1|grep “Bcast”|awk '{print $2}'|cut-d:-f 2` D_Name=`echo $line|awk '{print $1,$NF“分区”}'` D_Total=`echo $line|awk '{print $2}'` D_Avail=`echo $line|awk '{print $4}'` D_Percent=`echo $line|awk '{print $5}'|sed 's/%//g'` if [ “$D_Percent”-ge 50 ];then cat >email.txt < 日期/时间: 周二 2014年11月11日 15时:15分:53秒 CST 额外信息: CRITICAL-DISK Monitor:$D_Name Used more than ${D_Percent}% EOF EOF echo-e “ 33[32mThe $D_Name has been used for more than ${D_Percent}% ,Please Check. 33[0m” mail-s “$D_Name Warning” wgkgood@163.com #echo “The $D_Name has been used for more than ${D_Percent}% ,Please Check.”|mail-s “$D_Name Warning” wgkgood@163.com fi done