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

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

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

如脚本 getoptssh

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

如脚本 forsh

有时候shell脚本可以放在>

不知道你的日期格式是咋样的,不过思路是

获取目录名,进行拆分,年,月,日

然后判断是否合理

如果是日期格式,那么就获取时间戳,和当前时间戳相减

30天,就是30246060=2592000,判断下差值是大于2592000的,就删掉目录

求大神解决 编写一个shell程序 可以计算还有几天过生日并求1到该数字的 1、例子birthdaysh

#!/bin/sh

if [[ -z $1 ]];then

echo Usage $0 20170101;

exit 0;

fi

birthday=$1

startDate=`date -d now +%s`

endDate=`date -d $birthday +%s`

if [[ $startDate -gt $endDate ]];then

echo today is:$(date +%Y%m%d)

echo Please input date after today

exit 0;

fi

((stampDiff=endDate-startDate))

((dayDiff=stampDiff/86400))

echo Your Birthday is:$(date -d $birthday +%Y%m%d)

echo There is still $dayDiff days from your birthday;

for ((i=2;i<=$dayDiff;i=i+2));

do

((sum=sum+i))

done

echo $sum

2、使用

/birthdaysh 20170101

3、根据日期的时间戳,计算秒数差,除每天的秒数

shell编程计算你还有几天可以过生日

#!/bin/bash

read -p "请输入你生日的月份:" BMON

read -p "请输入你生日的日期: " BDAY

BYEAR=`date +%Y`

BIRTHDAY=`date -d ${BYEAR}${BMON}${BDAY} +%j 2>/dev/null`

NOWDAY=`date +%j`

REMAIN=$(($BIRTHDAY-$NOWDAY))

echo -e "目前距离你生日还剩下:\033[5m${REMAIN}\033[0m 天"

[flycat@redhat ~]$ /birthdaysh

请输入你生日的月份:11

请输入你生日的日期: 30

目前距离你生日还剩下:5 天

#符合要求的话,麻烦请点下采纳

Linux中编写一个shell程序,读入一组数字,使用for循环计算该数组数字的乘积。

#!/bin/bashread -p "请输入一组数字:" -a arrayaumulate=1for num in ${array[@]} do aumulate=$(( $aumulate num)) doneecho "乘积是:" $aumulate 计算读入的一组数字(在同一行输入)的积

c#编写一个程序,计算n=1+2+3+…50的算法求大神啊,急。

用循环固然没问题,但是,可以用数学公式进行简化,能提高运行效率。算法问题可以百度搜索,等差数列前N项和公式。

设等差数列{an}的前n项和为Sn,公差d

即 Sn=a1+a2++an;

公式:Sn=na1+n(n-1)d/2

int num1=1;

int num2=50;

int sum=(num1+num2)50/2

用c语言编写一个程序,来计算文件中字符、数字的个数。

#include "stdioh"

#include "stdlibh"

void main()

{

FILE fp;

char ch;

int charCounts=0,numCounts=0;

if((fp=fopen("testtxt","r"))==0)注意,由于我不知道你想打开的文件的位置和名称,我随意写的一个文件名,你自己要按你文件的路径和名称做修改

{

printf("文件读取失败!\n");

exit(0);

}

while((ch=fgetc(fp))!=EOF)

{

if(ch>='0'&&ch<='9')

numCounts++;

else

charCounts++;

}

printf("该文件中数字字符共有%d个,除数字这外的其它字符共有%d个。\n",numCounts,charCounts);

fclose(fp);

}

如何编写一个计算数字总和的程序

sum=0;累加器

for(你自己写)

{

sum+=varible;varible 为你的变量的值

}

编写一个程序,可以生成四个算术运算(+ - /)20到25位有效数字的结果。

#include

#include

int main(void)

{

int a,b,c=0;

char q;

while(!c){

printf("请输入两个整数值:");

puts("\n");

scanf("%d%d",&a,&b);

fflush(stdin);

printf("请输入一个运算符号(+-/)\n");

scanf("%c",&q);

if(q=='+')

printf("a+b的值是:%d",a+b);

else if(q=='-')

printf("a-b的值是:%d",a-b);

else if(q=='')

printf("ab的值是:%d",ab);

else if(q=='/')

printf("a/b的值是:%d",a/b);

else

{

printf("输入错误!");

c=1;

}

printf("再算一次吗?1:退出,0:继续\n");

scanf("%d",&c);

}

system("PAUSE");

return 0;

}

求程序“编写一个程序,统计用户输入的字符串中数字的个数” 急!

看看:

:hibaidu/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/644b57c3bd5694020ff47727

编写一个shell程序

find /PATH -type f -exec grep -l "root" {} \;

你可以在-type f这里制定更丰富的内容,仅供参考

为什么要用awk呢?

简单的进行时间转换就行了。不超过10行

redhat4环境下:

datesh内容:

flag=$1

time1=`date -d "$flag" +'%Y-%m-%d %H:%M'`

echo $time1

time2=`date -d "$time1" '+%s'`

echo $time2

time3=`expr $time2 + 180`

time4=`date -d "1970-01-01 UTC "$time3" seconds" +"%d-%b-%Y %H:%M"`

echo $time4

time5=`expr $time2 - 180`

time6=`date -d "1970-01-01 UTC "$time5" seconds" +"%d-%b-%Y %H:%M"`

echo $time6

检查结果:

[root@localhost ~]# sh datesh 00:00

2010-09-18 00:00

1284739200

18- 9月-2010 00:03

17- 9月-2010 23:57

[root@localhost ~]# sh datesh 00:12

2010-09-18 00:12

1284739920

18- 9月-2010 00:15

18- 9月-2010 00:09

每次执行结果最后两行就是你要的答案

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

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

原文地址: http://outofmemory.cn/web/9467149.html

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

发表评论

登录后才能评论

评论列表(0条)

保存