‘壹’ shell脚本实现校验时间格式
#!/bin/bash
read -p "please enter the date: " date
if [[ $date =~ "[0-9]{2}/[0-9]{2}/[0-9]{4}" ]]
then
echo "毕凳today is:${date:0:2} month is:${date:3:2} year is:${date:6:4}"
else
echo "wrong date"
fi
我没有对日期范手拍旅围做校验,你可以自贺团己加一下。
‘贰’ 求助大神:编写一个shell 脚本 ,移动某个文件夹下的文件到各自的日期组成的目录下
1、主要是从文件名截取出日期,如果固定了位数
2、可以先缺则按_分割取第二段
echo $file|awk -F\_ '{print $2}'
3、然后再取第4位后面拦扮仿的8位
4、简纤例如:vi a.sh
#!/bin/sh
for file in `ls *.jpg`;do
echo $file
datedir=$(echo $file|awk -F\_ '{print $2}'|awk '{print substr($1,4,8)}')
mkdir $datedir
/bin/mv $file $datedir
done
‘叁’ 编写shell脚本显示当前日期和时间,path环境变量的值,当前用户名称和当前所在的路径
1、用date 和echo就可以了。
2、实例:
#!/bin/sh
echo The date is:
date +%F
echo The time is:
date +%T
echo The PATH is:
echo $PATH
echo who r U:
whoami;
#echo $USER
echo the pwd:
echo $PWD
‘肆’ shell脚本两个日期值比较
这种标准格式的时期源搭应该是无法比较昌裂判的,你应该给这个时间转化为耐改linux的绝对时间然后比较大小,给你share一个我之前写的一个计算一个命令执行时间的的脚本,你一看就明白了。
#########################
BEGIN=`date +"%Y-%m-%d %H:%M:%S"`
bkup_system|tee -a bkup_time.log
END=`date +"%Y-%m-%d %H:%M:%S"`
print $BEGIN begin back up|tee -a bkup_time.log
print $END end buck up|tee -a bkup_time.log
#时间转化
Sys_data_begin=`date -d "$BEGIN" +%s`
Sys_data_end=`date -d "$END" +%s`
#计算间隔,可以根据间隔的正负来比较你时间的大小
INTER=`expr $Sys_data_end - $Sys_data_begin`
echo Total time do back up is $INTER s|tee -a bkup_time.log
########################
‘伍’ 关于SHELL脚本中日期大小的比较
1、既然按照当前日期,创建的,那么应该可以根据系统给的时间戳晌巧为属性,缓谨迟完成操作即可。
2、根据你的说法山掉7天谴的文件夹,那么应该是7天前建立的扰李文件夹进行删掉所以用ctime。
find ./ -ctime +7 -exec rm -rf {} \;
‘陆’ Shell之date命令用法
date命令在shell脚本中用处很大,比如要在脚本中标记一个日志或者针对某个文件做更改,就可以使用date给它做一些装饰,比如每天备份mysql,最终生成一个.sql的文件,那么我们就可以针对这个文件加一个日期的标记,这样就可以很清晰的知道我们备份的这个文件是哪一天生成的或者周几生成的,等到下一个对应的周几,此时备份的sql文件就会自动地将上一个周同一天的备份文件覆盖掉,这样就不用删除文件
1、date
# date //显示系统当前日期和时间
上面是date命令默认的输出格式,我们也可以将输出格式显示为英文
# LANG=en 姿山 //将系统环境变量LANG设置为英文格式
# date //然后执行date命令,结果如下
2、年月日
我们标记日期的方式一般的格式是:20180321 、 180321
# date +%Y //year,输出4位数年
# date +%y //输出2位数的年
# date +%m //m表示month,输出的结果是月份
# date +%d //d表示day,日
# date +%D //D表示特殊格式的日期表示方法,如下当前日期为2018年3月21日
我们还可以将上面的年月日组合在一起输出
# date +%Y%m%d //输出年月日
# date +%F //输出的年月日会用连字符隔开
3、时分秒
# date +%H //H表示hour小时
# date +%M //M表示minute分钟
# date +%S //S表示second秒
# date +%s //输出结果是一个时间戳,表示距离1970年1月1日0时0分过橘正去多少秒
# date +%T //以下面格式输出时分秒
# date +%H:%M:%S //效果跟上条命令一样
4、星期
# date +%w 圆册悔 //输出结果为星期几,比如下图表示当前系统时间是星期三
# date +%W //表示当前为今年的第几周,比如我这里为今年的第12周
5、日历
# cal //展示日历
6、从当前时间往前或往后推算
使用场景:比如我们切割日志在今天的0时0分,那么被切割出去的日志应该以昨天的日期来标记,因此需要倒推一天
# date -d "-1day" //当前系统时间为3月21日,输出结果为3月20日
# date -d "-1day" +%F
# date -d "-1 month" +%F //上个月
# date -d "-1 year" +%F //表示去年,year后面也可以加上s,day和month后也可以加上s
其他的时分秒也诸如此类
7、时间戳
# date +%s //获取时间戳
# date -d @1521563928 //将时间戳换算成日期
# date +%s -d "2017-03-21 00:38:48" //将日期换算成时间戳
‘柒’ shell脚本指定日期减去一天如何写
如果只减去一天的话,直接写就可以了。塌做带
#date-d"yesterday20150401"+%Y%m%d
如果要减去几天,还可以这样写,胡基如果用负数是往前数,
#date-d"10dayago2015-04-01"团芦+%Y-%m-%d
‘捌’ Linux下用shell获取指定文件的最后修改时间并与系统时间比对,如果相差时间超过3分钟则执行另一个脚本
使用date命令加上合适的时间格式化字符串(+%s),会显示当前时间(或-d参数指定的时间)与1970-01-01 00:00:00相差的秒数(详细可以参考date的man手册)
所以基本想法就是使用date命令分别获取当前时间与文件修改时间的秒数,然后洞喊看这2个秒数之间是否有相差180秒以上。
获取当前时间比较简单,直接date +%s就ok了
下面看看如何获取文件时间
使用stat 命令后面跟一个文件名可以获取文件的状态,包括文件猛悄修改时间。其中文件修改时间会单独一行显示,格式如下:Modify: 2013-02-21 17:58:05.404876407 +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 tt.txt | grep Modify | awk '{print $2}'`
filetime=`stat tt.txt | 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
‘玖’ 如何正确在Linux Shell脚本中定义一个时间变量
1、创建脚本 test.sh,并入截图内容。