gpt4 book ai didi

shell - 将时间戳与当前时间进行比较的 Unix 脚本

转载 作者:行者123 更新时间:2023-12-05 00:00:44 30 4
gpt4 key购买 nike

这是我第一次进入 Unix 脚本领域,我不知道如何去做。我将查询数据库并提取时间戳。我需要做的是获取那个时间戳(以 YYYYMMDDHHMMSS 的很棒的格式),如果它超过 10 分钟,则返回 1 否则返回 0。

同样,我对这种类型的脚本编写基本上有 0 经验(背景是 C++ 和 C#),所以如果你们不介意更多的解释,我会很感激 - 我也想了解它是如何工作的。

谢谢!

最佳答案

您的工具的工作方式取决于您使用的 Unix 风格。以下应该适用于 Linux、FreeBSD、NetBSD、OSX 等。

#!/bin/sh

sample="${1:-20120306131701}"

if ! expr "$sample" : '[0-9]\{14\}$' >/dev/null; then
echo "ERROR: unknown date format" >&2
exit 65
fi

case $(uname -s) in
*BSD|Darwin)
# The BSD date command allows you to specify an input format.
epoch=$(date -jf '%Y%m%d%H%M%S' "$sample" '+%s')
;;
Linux)
# No input format in Linux, so rewrite date to something '-d' will parse
tmpdate="$(echo "$sample" | sed -r 's/(.{8})(..)(..)(..)/\1 \2:\3:\4/')"
epoch=$(date -d "$tmpdate" '+%s')
;;
*)
echo "ERROR: I don't know how to do this in $(uname -s)." >&2
exit 69
;;
esac

now=$(date '+%s')

# And with the provided datetime and current time as integers, it's MATH time.
if [ $((now - epoch)) -gt 600 ]; then
exit 1
fi

exit 0

请注意,这是一个 /bin/sh脚本,为了可移植性,所以它没有利用你在 Linux 中可能习惯的 bash 主义,特别是 [[ ... ]]和 heretext 读取变量。

哦,我假设当您说“返回值”时,您的意思是“退出值”。返回值是函数的结果,但我上面写的是一个独立的脚本。

请注意,这可能无法理解 future 的时间戳,也不会考虑时区。如果这对你很重要,你应该,呃,考虑一下。 :-) 并在您的环境中进行测试。

关于shell - 将时间戳与当前时间进行比较的 Unix 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589168/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com