我有一个bash脚本,它通过CSV进行访问,并获得最后登录日期超过2个月的用户。我在网上找到了一种算法,可以帮助比较当前日期与日期。
#!/bin/bash
OLDIFS=$IFS
IFS=","
#while read user updateDate lastLoginDate
#do
#echo $user
#done < jira.csv
currentDate=$(date +%F)
echo $currentDate
IFS=$OLDIFS
year=$(echo $currentDate| cut -d'-' -f 1)
month=$(echo $currentDate| cut -d'-' -f 2)
day=$(echo $currentDate| cut -d'-' -f 3)
calculateDaysPassed () {
daysCalculated=365 * $year + $year / 4 - $year / 100 + $year / 400 + [ $month * 306 + 5] / 10 + [ $day - 1 ]
}
calculateDaysPassed # "$year" "$month" "$day"
echo $daysCalculated
不幸的是,我不断收到这样的错误,该错误在我的目录中获取文件。
parseJiraUsers.sh: line 24: Atom.app: command not found
因此Atom应用位于我的桌面目录中(与该脚本和CSV使用的位置相同)。我将其移至我的文档,它只是在我在那里的文档上引发了另一个命令错误。 WTF正在进行吗?
仅供参考:此方法适用于上面未注释掉的CSV部分。我只是将它们注释掉,以查看是否有任何更改(没有更改)。
答案 0 :(得分:0)
你不能那样做数学。该怪异错误的根源是您在此行中使用*进行乘法:
daysCalculated=365 * $year + $year / 4 - $year / 100 + $year / 400 + [ $month * 306 + 5] / 10 + [ $day - 1 ]
这种解释的方式是将dayscalculated
设置为365。之后,该行上的所有其他内容都像一个单独的命令。因此,首先,它将*解释为当前目录中的所有文件。它将尝试像执行命令一样执行第一个文件名,其余行将被视为该命令的参数。因此,命令Atom.app
...
您应该使用$((...))
进行c风格的数学运算,但是,这仅适用于整数。由于所有的划分,您的结果可能不会以您想要的方式出现。您可能需要使用bc
之类的工具。
答案 1 :(得分:0)
感谢@Cyrus提供有关shellcheck.net的回复。
该网站指出我在计算天数时未放入$(())来做错了算术