Linux下用shell获取指定文件的最后修改时间并与系统时间比对,如果相差时间超过3分钟则执行另一个脚本

Linux下用shell获取指定文件的最后修改时间并与系统时间比对,如果相差时间超过3分钟则执行另一个脚本,第1张

使用date命令加上合适的时间格式化字符串(+%s),会显示当前时间(或-d参数指定的时间)与1970-01-01 00:00:00相差的秒数(详细可以参考date的man手册)

所以基本想法就是使用date命令分别获取当前时间与文件修改时间的秒数,然后看这2个秒数之间是否有相差180秒以上。

获取当前时间比较简单,直接date +%s就ok了

下面看看如何获取文件时间

使用stat 命令后面跟一个文件名可以获取文件的状态,包括文件修改时间。其中文件修改时间会单独一行显示,格式如下:Modify: 2013-02-21 17:58:05404876407 +0800 (具体的精度可能系统不同略微有些差别,但大致格式是这样)

所以我们可以stat myfilename | grep Modify来获取文件的修改时间的信息,然后通过awk分别获取时间的日期和时间段

stat myfilename | grep Modify | awk '{print $2}'  #这句获取了日期段,即上面例子里面的2013-02-21

stat myfilename | grep Modify | awk '{split($3,var,"");print var[1]}' #这句获取了时间段,即上面例子里面的17:58:05,具体关于awk的使用可以参考awk的使用手册

那么现在可以获取文件修改时间与1970-01-01 00:00:00相差的描述了,就是date -d "$file_date $file_time" +%s

那么这个时间与当前时间想减的结果与180相比就可以知道是否满足条件了,满足条件的话就可以执行相应的命令。

参考代码如下:

current_datetime=`date +%s`

filedate=`stat tttxt | grep Modify | awk '{print $2}'`

filetime=`stat tttxt | grep Modify | awk '{split($3,var,"");print var[1]}'`

file_datetime=`date -d "$filedate $filetime" +%s

timedelta=`expr $current_datetime - $file_datetime`

if [ "$timedelta" -gt "180" ];then

echo "match condition"

fi

想把月份和日子左边的0去掉是吧, 用这个看看

echo `date +%Y-%m-%d` | awk -F"-" '{printf("date is %d-%d-%d\n",$1,$2,$3)}'

1、date +%w

%w day of week (06); 0 is Sunday

2、如果星期2-6,上一个工作日肯定就是

t1=`date -d yesterday`

或者

t2=`date -d -1day`

3、如果星期天,上一个工作日肯定就是

t3=`date -d -2day`

4、如果星期1,上一个工作日肯定就是

t4=`date -d -3day`

5、法定节假日根据实际情况算吧

6、实例

#!/bin/sh

week=`date +%w`

case "$week" in

0)

last_work_day=`date -d -2day`

;;

1)

last_work_day=`date -d -3day`

;;

)

last_work_day=`date -d -1day`

;;

esac

echo $last_work_day

本文介绍以下2个知识点,为后后续在工作过程中安装一键安装脚本打好基础:

如下shell脚本中传入的参数依次值如下:

如脚本 getoptssh

执行 /getoptssh -a dd -b ,打印如下结果

如脚本 forsh

有时候shell脚本可以放在>

today"

"昨天是: todayAddDays(-1))"

"明天是: todayAddDays(1))"

"一周前是: todayAddDays(-7))"

"五个月前: todayAddMonths(-5))"

"十年之前: todayAddYears(-10)Year)年,我们是朋友"

"格式化日期:" + $todayToString('yyyy-MM-dd')

将一条命令的执行结果取得命令执行结果的值有:

1、使用反引号`` (数字键1左边的键,tab键上面,英文方式输入) 如:a=`echo "hello world"`;即将命令 echo "hello world"的输出赋给变量a

2、可以使用 $(()),如:a=$(echo "hello world"),即将命令echo "hello world"的输出赋给变量a。

以下为具体语句:

实例结果:

shell 是一个交互性命令解释器。shell独立于 *** 作系统,这种设计让用户可以灵活选择适合自己的shell。shell让你在命令行键入命令,经过shell解释后传送给 *** 作系统(内核)执行。

shell是一个命令处理器(command processor)——是一个读入并解释你输入的命令的程序。除了是一个命令中断器以外,shell还是一个程序设计语言。你可以编写shell可以解释的程序(被称为源程序),这些源程序可以包含shell程序设计命令等等。shell除了解释命令以外,还有其他工作,它也可以配置和编程。     

以上就是关于Linux下用shell获取指定文件的最后修改时间并与系统时间比对,如果相差时间超过3分钟则执行另一个脚本全部的内容,包括:Linux下用shell获取指定文件的最后修改时间并与系统时间比对,如果相差时间超过3分钟则执行另一个脚本、SHELL脚本取系统当前年月日问题、linux 下 shell 脚本取上一工作日日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9647449.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存