一、这节课掌握如下几个知识点
【1】掌握shell中的加、减、乘、除等运算
【2】掌握日期和时间的运算
【3】掌握如下几种计算方法
[1] (( )) 只能用于整数运算
[2] let 只能用于整数运算,和 (()) 类似。
[3] $[] 只能用于整数运算。
[4] expr 可用于整数运算,也可以处理字符串,不能用于小数运算。
[5] bc 可以处理整数和小数
[6] awk 可以处理整数和小数【推荐】
二、代码讲解
本节主要讲解在shell中涉及的加减乘除、时间等相关运算。
#!/bin/bash
#9.sh v1
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
export LANG=zh_CN.UTF-8
export PATH
#1.(())的用法,只适用于整数计算
echo "============1===="
var=25
((var+=34))
echo $var #结果:59
#2.let的用法,只适用于整数计算
echo "============2===="
#注意:一般情况不用加双引号,但是若表达式中有bash中的关键字就需要双引号
var=25
let "var+=34"
echo $var #结果:59
#3.$[]的用法,只适用于整数计算
echo "============3===="
var=45
var=$[$var-35]
echo $var #结果:10
#4.expr的用法,只适用于整数计算
echo "============4===="
#注意:expr后的表达式个符号间需用空格隔开,*需要反斜杠,+-/都不需要
var=12
var=`expr $var \* 2`
echo $var #结果:24
#5.bc的用法,可用于小数计算
echo "============5===="
var=18
var=$(echo "$var/2"|bc)
echo $var #结果:9
var=3.14
var=$(echo "scale=2;$var*3"|bc)
echo $var #结果:9.42
#注意:
#1)bc中要使用scale进行位数设置,但是scale只对除法、取余、乘幂有效,比如乘法就无效。
echo "scale=4; 1.3256456 / 1.23" | bc -l #结果:1.0777
#2)scale对于乘法无效的解决办法就是除以1:
echo "scale=4; (1.3256456231 * 1.1) / 1" | bc -l #结果:1.4582
#6.awk进行数字计算的方法,可用于小数计算
echo "==============6======"
echo "1 2"|awk '{printf("%g",$1*$2)}' #结果:2
echo "1 3"|awk '{printf("%0.3f",$1/$2)}' #结果:0.333
echo "1 2"|awk '{printf("%g",$1/$2)}' #结果:0.5
echo "1 2"|awk '{printf("%0.3g",$1/$2)}' #结果:0.5
echo "1 2"|awk '{printf("%0.3f",$1/$2)}'#结果:0.500
#7.日期及时间的运算
echo "============7===="
date +%Y-%m-%dT%H:%M:%S #按照2020-05-25T15:49:5这种格式输出当前时间
date +%s #输出当前时间的时间戳
date +%Y-%m-%d -d "-1 day" #按照2020-05-25格式输出当前时间前一天的日期
date "+%Y-%m-%d %H:%M:%S" -d "-1 hour" #输出当前时间的前一小时
date "+%Y-%m-%d %H:%M:%S" -d "-1 min" #输出当前时间的前一分钟
date "+%Y-%m-%d %H:%M:%S" -d "-1 second" #输出当前时间的前一秒
date -d "2020-05-25 16:43:32" -d "-1 day" "+%Y-%m-%d %H:%M:%S" #输出2020-05-25 16:43:32前一天的时间 结果:2020-05-24 16:19:02
date -d "2020-05-25 -1 day" "+%Y-%m-%d" #输出2020-05-25前一天的日期,结果:2020-05-24
date -d "20200525 -1 day" "+%Y%m%d" #输出20200525前一天的日期,结果:20200524
date -d "20200525 +1 day" "+%Y%m%d" #输出20200525往后一天的日期,结果:20200524
date -d "20200525 +1 month" "+%Y%m%d" #输出20200525往后一个月的日期,结果:20200425
date -d "20200525 +1 year" "+%Y%m%d" #输出20200525往后一年的日期,结果:20190525
date "+%Y-%m-%d %H:%M:%S" -d @1425384141 #将时间戳1425384141转换成时间,结果:2015-03-03 20:02:21
date -d "2020-05-25T15:36:03" "+%s" #将时间2020-05-25T15:36:03转成时间戳,结果:1590395763
date -d "2020-05-25 -1 day" "+%s" #将时间2020-05-25的前一天转成时间戳,结果:1590249600
date -d "`date +%Y-%m-%d -d "-1 day"` 00:00:00" +%s #将当前时间的前一天转成时间戳
date -d "2020-05-25 -1 day 16:43:32" +%Y-%m-%d\ %H:%M:%S #输出2020-05-25 16:43:32前一天的同一时间