shell基础(三)

输入输出重定向
在这里插入图片描述
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
文件包含
. filename # 注意点号(.)和文件名中间有一空格

source filename

***反引号、$()和${}的区别***
(一)反引号和$()的作用相同,用于命令替换(command substitution),即完成引用的命令的执行,将其结果替换出来,与变量替换差不多。
echo `date '--date=1 hour ago' +%Y-%m-%d-%H`
#或者
echo $(date '--date=1 hour ago' +%Y-%m-%d-%H)
在编写Shell脚本时建议使用$(),原因主要有:
 (1)反引号与单引号外形相似,容易混淆; 
 (2)在多层次的复合替换中,里层的反引号需要转义处理(\`) ,而$()则比较直观。例如下面的命令格式是错的
 (3)反引号中对于反斜杠有特殊的处理,使用反协议对Shell特殊字符进行转义时需要两个反斜杠,而$()中只需要使用一个反斜杠。比如下面的脚本,需要输出$HOME,而不是环境变量HOME的内容,在反引号中需要对$符使用双反斜杠进行转义,$()中只需要使用一个反斜杠。


 (二)  ${}用于变量替换
    ${:}与${::}用于字符串提取
    (1)${var:n} 若n为正数,n从0开始,表示在变量var中提取第n个字符到末尾的所有字符。若n为负数,提取字符串最后面n的绝对值个字符,使用时在冒号后面加空格或一个算术表达式或整个num加上括号,如${var: -2}、${var:1−3}或 ${var:(-2)}均表示提取最后两个字符。
    (2)${var:n1:n2} ${var:n1:n2}用于提取从下标n1开始后面n2个字符,其中下标n1与n2从0开始。
    ${/}与${//}用于字符串模式匹配替换
    ${var/pattern/pattern}表示将var字符串的第一个匹配的pattern替换为另一个pattern。不改变原变量。
    ${#}、${##}、${%}与${%%}用于字符串模式匹配截断
    可以过滤掉符合指定规则的字符串,不改变原变量。
    #是去掉左边(在鉴盘上#在$之左边)
    %是去掉右边(在鉴盘上%在$之右边)
    一个符号是最小匹配,两个符号是最大匹配。

系统内存低于100M邮件报警,加入计划任务,3分钟检查一次

(1)分析需求
 明白开发需求,是完成程序的大前提,因此,分析需求至关重要,一切不以需求为主的程序开发,都是耍流氓的!
(2)设计思路
设计思路就是根据需求,把需求进行拆解,分模块逐步实现,例如本题可以分为如下几步:
1)获取当前系统剩余内存的值(先在命令行实现)。
2)配置邮件报警(可采用第三方邮件服务器)。
3)判断取到的值是否小于100MB,如果小于100MB,就报警(采用if语句)。
4)编码实现Shell脚本。
5)加入crond定时任务,每三分钟检查一次
(3)编码实现
    编码实现就是具体的编码及调试过程,工作中很可能需要先在测试环境下调试,调试好了,再发布到生产环境中。
第一步 先配置邮件服务,保证能够发生邮件
echo 'set from=mail@znix.top smtp=smtp.znix.top smtp-auth-user=mail@znix.top  smtp-auth-password=****** smtp-auth=login' >> /etc/mail.rc
发送测试邮件发送
echo "`date +%F_%T`" |mail -s "这是测试邮件" admin@znix.top
第二步编写检查脚本   
[root@master scripts]# cat mem_info.sh 
#!/bin/bash
##############################################################
# File Name: mem_info.sh
# Version: V1.0
# Author: abcd
# Organization: http://blog.znix.top
# Created Time : 2018-12-06 9:42:58
# Description:
##############################################################

Mem=`free -m |awk 'NR==2{print $NF}'`
host=`hostname`
Ip=`hostname -I`
Date=`date +%F_%T`
mail_file=/tmp/mail.s
dest_user=admin@znix.top

if [ $Mem -lt 100 ]
then
   echo "发生时间: $Date" >$mail_file
   echo "发生主机: $host  主机IP地址: $Ip " >> $mail_file
   echo "内存余量: $Mem M" >> $mail_file
   mail -s "【警告】内存不足了呀!"  $dest_user < $mail_file
fi
第三步测试脚本(可以修改判断的值)
[root@master scripts]# sh mem_info.sh
第四步 脚本测试成功,写入定时任务
[root@master scripts]# crontab -l 
# 检查内存剩余大小
*/3 * * * * /bin/sh /server/scripts/panduan/mem_info.sh  &>/dev/null

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值