linux脚本shell实现一天中当前时间和设置的时间段比较

本文介绍了一个Shell脚本,用于在指定时间段内自动备份日志文件。脚本通过将当前时间转换为时间戳,并与设定的时间段进行比较,实现每5秒检测一次,确保在每天23:59:54至23:59:59之间执行备份,备份文件名包含精确的日期和时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.编写shell脚本,获取当前时间和设定的时间段进行比较。时间需要变成时间戳(单位秒,1970年至今),然后对当前时间戳和设定的时间戳进行比较。

二.示例。脚本中写循环,每5秒检测一次,在每天的23:59:54至23:59:59时间段备份log,备份的log文件名含日期时间。

#!/bin/sh

while true 
do
	curtime=`date "+%H:%M:%S"`
	curStamp=`date -d "$curtime" +%s` 
	limtime="23:59:54"
	limStamp=`date -d "$limtime" +%s` 
	limtimeup="23:59:59"
	limStampup=`date -d "$limtimeup" +%s` 
	
	if [ $curStamp -ge $limStamp -a $curStamp -lt $limStampup ]; then
		echo limtime = $limtime
		echo limtimeup = $limtimeup
		echo curtime = $curtime
		mv /mnt/sata/0/0/test.log /mnt/sata/0/0/test"`date +%Y%m%d_%H%M%S`".log
	fi
	
	sleep 5    
	
done  

注意:在if语句判断“[  ]”中注意前后的空格,调用变量使用“$”。

三.附注:

参考“Linux Shell日期比较,数值比较和字符串比较及相关 - helloxiaozhe的博客 - 优快云博客  https://blog.youkuaiyun.com/helloxiaozhe/article/details/81280095”

脚本中各运算符说明::

1.只适用于数值的比较

该类型操作会把两边变量当成整型进行加减运算,字符串abcd按整型运算无法进行,所以此类型不能用于字符串比较

参数

说明

-eq

等于则为真

-ne

不等于则为真

-gt

大于则为真

-ge

大于等于则为真

-lt

小于则为真

-le

小于等于则为真

2.适用于字符串的比较(也可用于数值比较)

参数

说明

=

相等则为真

!=

不相等则为真

3.字符串测试运算

参数

说明

-z 字符串

字符串的长度为零则为真

-n 字符串

字符串的长度不为零则为真

4.文件测试运算

参数

说明

-e 文件名

如果文件存在则为真

-r 文件名

如果文件存在且可读则为真

-w 文件名

如果文件存在且可写则为真

-x 文件名

如果文件存在且可执行则为真

-s 文件名

如果文件存在且至少有一个字符则为真,即文件大小非0时为真

-d 文件名

如果文件存在且为目录则为真

-f 文件名

如果文件存在且为普通文件则为真

-c 文件名

如果文件存在且为字符型特殊文件则为真

-b 文件名

如果文件存在且为块特殊文件则为真

### 如何在 Shell 脚本中配置定时任务进行批处理 #### 使用 Crontab 配置定时任务 对于 Linux 系统中的批量处理任务,通常采用 `crontab` 来安排定期运行的任务。为了确保这些任务能够按照预期执行,需要遵循特定的语法格式。 当创建一个新的 cron 作业时,在终端输入 `crontab -e` 可以编辑当前用户的 crontab 文件[^2]。随后可以添加如下形式的一行来定义何时以及如何执行脚本: ```bash * * * * * command_to_be_executed - - - - - | | | | | | | | | +----- 星期几 (0 - 7) (星期天=0或7) | | | +------- 月份 (1 - 12) | | +--------- 一个月中的某一天 (1 - 31) | +----------- 小时数 (0 - 23) +------------- 分钟数 (0 - 59) ``` 例如,要每天上午九点半执行位于 `/home/user/script.sh` 的脚本,则应写入: ```bash 30 9 * * * /home/user/script.sh ``` 这表示该命令将在每日的 09:30 执行一次。 #### 解决自动执行失败的问题 有时可能会遇到虽然手动触发正常工作但到了预定时间却没有响应的情况。针对此类问题,建议检查以下几个方面: - **权限设置**:确认用于执行此操作的身份具有足够的权限访问所需资源并完成相应动作。 - **路径变量**:确保所使用的任何外部工具都在系统的 PATH 中;如果不是的话,应该提供完整的绝对路径给那些可执行文件。 - **日志记录**:启用详细的日志输出可以帮助诊断潜在错误原因,并验证是否真的尝试启动了进程。 #### 实现 FTP 定时下载功能 如果目标是在固定时间段内从远程服务器上获取最新版本的数据集或其他类型的文件集合,那么可以通过编写一个简单的 shell script 并将其加入到 crontab 当中来达成目的。下面给出了一段示范性的代码片段用来说明这一点[^3]: ```bash #!/bin/bash HOST='ftp.example.com' USER='your_username' PASSWD='your_password' # 远程目录下的待下载文件列表 FILES="file1 file2" lftp -u $USER,$PASSWD $HOST <<EOF cd /remote/path/ mget ${FILES} bye EOF ``` 这段脚本利用 lftp 工具连接至指定主机上的 FTP 服务端口,并从中检索预先设定好的多个文件名对应的项目存放到本地磁盘里去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值