3天玩转shell--9.shell中的数字及时间运算

简介: 本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。

一、这节课掌握如下几个知识点

【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前一天的同一时间
相关文章
|
6月前
|
Shell C++ 开发者
【Shell 编程指南】Shell运算操作符之$[]详解
【Shell 编程指南】Shell运算操作符之$[]详解
49 0
|
5月前
|
Shell Linux Python
Shell 数学计算:轻松掌握算术运算基本功
在Shell脚本中进行数学计算需借助特定方法。`(())`用于高效整数运算,如`((1+1))`,而`bc`处理小数,如`echo "3.14 + 2.86" | bc`。`let`与`(())`相似,`expr`较繁琐,`declare -i`仅限基础整数运算。使用`bc`时,`scale`定义小数精度。通过这些工具,Shell脚本也能实现复杂的数学计算。
86 0
|
6月前
|
Shell 程序员 Linux
【Shell 编程指南】shell运算操作符之(())
【Shell 编程指南】shell运算操作符之(())
47 0
|
6月前
|
算法 Shell Linux
【Shell 命令集合 文档编辑 内建命令】Linux数值运算和赋值操作 let命令使用指南
【Shell 命令集合 文档编辑 内建命令】Linux数值运算和赋值操作 let命令使用指南
60 0
|
6月前
|
Shell Linux C语言
【Shell 命令集合 文档编辑】Linux 种算术运算 expr命令使用指南
【Shell 命令集合 文档编辑】Linux 种算术运算 expr命令使用指南
86 0
|
运维 Shell Python
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(一)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)
132 0
|
6月前
|
Shell Windows Perl
Shell编程自动化之数学运算与条件测试
本文主要介绍了Shell编程自动化之数学运算与条件测试,并结合实例测试。
48 0
|
6月前
|
Kubernetes Shell Linux
linux|shell编程|shell脚本内的加减乘除运算实现和π值的计算示例
linux|shell编程|shell脚本内的加减乘除运算实现和π值的计算示例
412 0
|
运维 Shell Perl
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
131 0
|
Shell
SHELL运算操作符与运算命令、原码、补码、反码
原码:最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。 反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。 补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变
111 0