用于日期操作的 Shell 脚本

发布于 2024-11-08 20:29:13 字数 220 浏览 3 评论 0原文

如果脚本中的日期介于 08:03 和 14:03 之间,我想做一些事情。

但当我尝试时

dt=`date +%H:%M`


if [ $dt -eq 08:03 ]
then
echo $dt > msize.txt
#echo "iam im 1 if"
fi

它不起作用。该文件每分钟在 crontab 中运行一次。请建议一些东西

I want to do something if the date is in between 08:03 an 14:03 in a script.

but when I try

dt=`date +%H:%M`


if [ $dt -eq 08:03 ]
then
echo $dt > msize.txt
#echo "iam im 1 if"
fi

it doesn't work. This file is run in crontab in every minute. Please suggest something

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萝莉病 2024-11-15 20:29:13

正如 Rafe 在另一个答案中指出的那样, -eq 是数字,您需要使用 == 来比较字符串。但你说你想判断时间是否在两个时间之间,而不是完全等于一。在这种情况下,您应该使用 < 运算符:

if [ '08:03' \< "$dt" -a "$dt" \< '14:03']

或者更方便:

if [[ '08:03' < "$dt" && "$dt" < '14:03']]

请注意,这些运算符未在 POSIX 中指定,但适用于大多数 shell(Bash、Korn Shell、zsh)。如果您使用的是像 Dash 这样的最小 shell(Ubuntu 上的 /bin/sh 就是这样),请小心使用它们。

As Rafe points out in the other answer, -eq is numeric, you need to use == to compare strings. But you said that you want to tell if the time is between two times, not exactly equal to one. In that case you should use the < operator:

if [ '08:03' \< "$dt" -a "$dt" \< '14:03']

Or more conveniently:

if [[ '08:03' < "$dt" && "$dt" < '14:03']]

Note that these operators are not specified in POSIX, but work on most shells (Bash, Korn Shell, zsh). Just beware of using them if you're using a minimal shell like Dash (which is what /bin/sh is on Ubuntu).

优雅的叶子 2024-11-15 20:29:13

-eq 运算符用于比较整数,而不是字符串。如果要比较字符串,则需要使用 ==。试试这个:

if [ $dt == '08:03' ]
then
# Rest of script

The -eq operator is for comparing integers, not strings. If you want to compare strings, you'll need to use ==. Try this:

if [ $dt == '08:03' ]
then
# Rest of script
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文