shell计算(二)let和expr命令

一   let运算命令

(1)let运算命令的'语法格式':let 赋值表达式-->let a=3+5

let'赋值表达式'的功能等同于--->'((赋值表达式))'

'let i=i+2' ==>等价 '((i=i+2))'

'关键':后者的效率更高

取消变量

unset  环境变量

unset JAVA_HOME

不管是临时环境变量还是系统环境变量('只对当前终端起作用')

经典案例:监控Web服务状态,如果访问两次均失败,则报警

#!/bin/bash

# (1)写成一个函数,方便后续调用

CheckUrl(){
    # 1)超时检测时间-->定义wget访问的超过时间,没有返回数值则表示失败,则退出
    timeout=5
    # 2)初始化访问网站失败所记录次数,定义:失败达到两次,则发送邮件报警
    fails=0
    # 3)初始化访问网站成功所记录次数,定义:只要在规定的时间内,成功一次(记录为1)则表示成功,退出脚本
    success=0

    # 4)死循环-->持续监测-->成功,则exit退出
    while true
    do
	# (1)wget访问自己的一个博客
        wget --timeout=${timeout} --tries=1 https://harbor.wangzj.club -q -O /dev/null
	# (2)根据命令回传码判断网站的存活状态
	if [ $? -ne 0 ];then
	    # 将访问失败的次数加1
	    let fails+=1
	else
	    # 返回值不为0则不成立,即访问成功
	    let success+=1
	fi

	# (2)如果成功的次数大于1等于1-->一般是等于1(其实可以写到上面success+=1下面)
	if [ $success -ge 1 ];then
	    # 下面是为了观察方便,打印标识-->可以加上颜色
	    echo "Your Website is alive"
	    # 退出脚本
	    exit 0
        fi

	# (3)如果失败次数大于等于2-->实际等于2,则报警
	if [ $fails -ge 2 ];then
	    # 定义描述信息
	    Critical="Your Website is dead"
	    # 输出并发送邮件警报;需要单独配置自己的邮箱地址
        # v的含义-->将 Mail 程序置为详细方式。显示传送到用户终端的详细信息。
        # s含义-->标题
	    echo $Critical|tee|mail -v -s "$Critical" 1125246519@qq.com
	    # 同时退出
	    exit 2
	fi
done

}

# 调用函数

CheckUrl

发送邮件一个小脚本

[root@ecs-TmQV ~]# cat sendmail-to-qq.sh 
#!/bin/bash
# (1)获取qq的授权码
# (2)安装发送邮件的软件
yum install mailx -y
# (3)重新定义mail的配置文件
echo \
"# 对方收到邮件时显示的发件人
set from=xxxxxxxx@qq.com
# 第三方发邮件的smtp服务器地址		       
set smtp=smtps://smtp.qq.com:465
# 第三方发邮件的用户名
set smtp-auth-user=xxxxxxxx@qq.com
# 授权码
set smtp-auth-password=mspxxxxxxiogeeb 
# 认证
set ssl-verify=ignore
set nss-config-dir=/root/.certs
# 第三方发邮件的smtp服务器地址
set smtp-auth=login" >> /etc/mail.rc
echo "状态码是$?"
#命令生成一个整数-->防止出现报错-->'Error in certificate: Peer’s certificate issuer is not recognized.'
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs

测试效果

参考文档

二    expr命令

expr命令的基本用法

expr既可以用于'整数运算',也可以用于'相关字符串长度'、'匹配'等的运算处理

1)expr 用于计算

语法:expr Expression ==>'表达式中可包含变量'

expr 1 + 1

# *在shell中有特殊含义-->统配符,这里转移,表示运算符号

expr 2 \* 3

注意事项

运算符及用于计算的'数字左右'都'至少有一个空格',否则会'报错'

使用乘号时,必须用'反斜线'进行'转义'

2)expr 配合变量计算

expr 在 shell 中可'配合变量进行计算',但需要用'反引号或 $()' 将计算表达式'括起来'

 i=5
 j=$(expr $i + 5)
 echo $j

 3)判断变量或字符串是否为整数

'原理':利用以 expr 做计算时'变量'或'字符串必须是整数的规则',把一个变量或字符串'位置变量'和一个已知的整数(非0)相加,看命令返回的值是否为0

'结果':如果是0,就认为做加法的变量或字符串为整数,否则就不是整数

报错:非整数参数

#!/bin/bash
# 功能通过传参判断输出的内容是否为整数
# cat expr.sh
expr $1 + 1 > /dev/null
[ $? -eq 0 ] && echo int || echo chars

4)expr特殊用法

(1)判断文件扩展名是否复合要求

# 是否是以sh结尾的

expr "text.sh" : ".*\.sh" &>/dev/null && echo "yes" ||echo  "no"

".*\.文件后缀"---> ':' 号的作用

(2)计算字符串的长度

小需求:统计语句中字符数不大于6的单词,并输出

#!/bin/bash
for i in I am wzj java welcome everyone to our training
do
	if [ `expr length $i` -le 6 ];then
		echo $i
        fi
done

链接1

链接2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值