在 SHELL 中比较 if 命令内的日期

在 SHELL 中比较 if 命令内的日期

no我尝试在 Linux 中运行以下 shell 脚本,但出于某种原因,它无法正常运行,即使日期匹配,我也得到了输出。有人能指出这里出了什么问题吗?

var='date +%d'
if [ $var = 17 ]
then echo yes
else echo no
fi

我正在尝试创建一个基于月份日期的自动化系统。

答案1

var='date +%d'本质上将字符串分配date +%d$var

你可能想要做的是将结果分配date +%d$varvia命令替换

var=$(date +%d)
if [ $var = 17 ]
then echo yes
else echo no
fi

答案2

三个问题:

  1. 您没有正确访问变量-您需要一个$前缀;
  2. var在分配命令的返回值时,您使用的是单引号而不是反引号;
  3. 您正在比较字符串(=),而不是整数(-eq)。
var=`date +%d`
if [ $var -eq 17 ]
then echo yes
else echo no
fi

更新答案

考虑到 Glenn 的评论(12

  1. ${...}就可读性和清晰度而言,可以被认为比反引号更好
  2. 用于date '+%-d'避免日期的零填充,以进行算术比较,这将导致无效的八进制数错误。

因此,可以说,同样的代码最好写成这样:

var=${date '+%-d'}
if [ $var -eq 17 ]
then echo yes
else echo no
fi

相关内容