【Linux】shell: 获取时间间隔到毫秒、微秒级别

本文介绍如何利用Shell脚本中的date命令获取纳秒级时间,并演示了一个具体的例子来测量时间间隔,包括毫秒和微妙级别。

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

对于shell,通过date命令可以获取到当前时间,还可以设定特殊格式,看help你可以看到下面两个好用的参数:

?
%s     seconds since '00:00:00 1970-01-01 UTC' (a GNU extension)
%N     nanoseconds (000000000..999999999)

这里%s表示当前时间的秒数,而%N表示当前时间的纳秒部分,即1秒以下的那部分,

那么通过%s%N结合使用,我们就可以拿到纳秒级别的数据了。

?
#!/bin/sh
function getTiming(){
     start= $1
     end= $2
 
     start_s=`echo $start  | cut -d '.'  -f 1`
     start_ns=`echo $start  | cut -d '.'  -f 2`
     end_s=`echo $end  | cut -d '.'  -f 1`
     end_ns=`echo $end  | cut -d '.'  -f 2`
 
     time_micro=$(( (10 #$end_s-10#$start_s)*1000000 + (10#$end_ns/1000 - 10#$start_ns/1000) ))
     time_ms=`expr $time_micro /1000  | bc `
 
     echo "$time_micro microseconds"
     echo "$time_ms ms"
}
 
begin_time=`date + %s . %N `
sleep  10
end_time=`date + %s . %N `
 
getTiming $begin_time  $end_time

 

执行脚本,看到输出结果了么?

?
10001430 microseconds
10001 ms

ok,搞定。

 

对不同单位的时间有所混淆么?下面是备忘。  

1s=1000ms

1ms=1000 microseconds

1microsecond=1000 nanoseconds

 

参考资料:http://blog.youkuaiyun.com/gengshenghong/article/details/7583580

转载请注明出处:  http://www.cnblogs.com/liyuxia713/


<think>我们使用中文回答,并且按照要求,在回答后提出3-5个相关问题,以“§§相关问题§§”开头,然后列出问题。 问题:shell脚本sleep只能是1s以上吗? 回答:不是,sleep命令可以接受小数秒(例如0.5秒)以及分钟、小时等。在大多数现代系统中,sleep支持小数秒。例如: sleep 0.5 # 睡眠0.5秒 sleep 1 # 睡眠1秒 sleep 0.001 # 睡眠1毫秒 但是,需要注意的是,sleep命令的精度取决于系统,通常可以达到毫秒级,但实际睡眠时间可能受系统负载和调度的影响。 另外,sleep命令还可以接受多个参数,这些参数会被相加,例如: sleep 1m 30s # 睡眠1分30秒 下面是一个示例脚本,展示如何使用小数秒: #!/bin/bash echo "开始" sleep 0.5 echo "0.5秒后" 然而,在某些旧版本的系统中(如一些嵌入式设备或旧版Unix),sleep可能只支持整数秒。在这种情况下,可以使用其他工具(如usleep,微秒睡眠)来实现更小的时间间隔。例如: usleep 500000 # 睡眠500毫秒(0.5秒) 但usleep不是POSIX标准命令,而sleep是。在支持高精度sleep的系统中,sleep支持小数是更可移植的做法。 因此,在编写脚本时,如果需要在小于1秒的时间间隔,可以先确认目标系统是否支持小数秒的sleep。可以通过以下命令测试: sleep 0.1 && echo "支持小数秒" || echo "可能不支持小数秒" 总结:在大多数现代Linux和Unix系统中,sleep命令支持小数秒(浮点数)。如果遇到不支持的环境,可以考虑使用其他工具(如usleep)或变通方法。 §§相关问题§§ 1. 在哪些操作系统中sleep命令不支持小数秒? 2. 如何编写一个兼容不同系统的睡眠脚本(同时支持整数秒和小数秒)? 3. 除了sleep和usleep,还有哪些命令可以实现毫秒级精度的延迟? 4. sleep命令的最大睡眠时间是多少?超过最大值会怎样? 5. 在shell脚本中如何实现纳秒级别的延迟?</think>### 回答: Shell 脚本中的 `sleep` 命令**可以支持小于 1 秒的时间精度**,具体取决于系统环境和实现方式: 1. **标准用法**: ```bash sleep 0.5 # 睡眠 0.5 秒(500 毫秒) sleep 0.001 # 睡眠 1 毫秒 ``` 2. **不同系统的支持情况**: - 现代 Linux 系统(GNU coreutils):支持小数秒 - macOS/BSD 系统:支持小数秒 - POSIX 兼容环境:支持小数秒 - 极少数嵌入式系统:可能只支持整数秒 3. **精度限制**: - 实际精度取决于系统时钟粒度(通常 1ms-10ms) - 最小可接受值通常为 `0.001`(1 毫秒) - 测试命令:`time sleep 0.001` 4. **替代方案**(当小数秒不可用时): ```bash usleep 500000 # 微秒级睡眠(500ms),需要安装 util-linux ``` 5. **示例脚本**: ```bash #!/bin/bash echo "开始: $(date +%H:%M:%S.%N)" sleep 0.3 echo "300ms后: $(date +%H:%M:%S.%N)" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值