Bash脚本以某种方式调用我目录中的文件

时间:2018-08-03 18:53:53

标签: bash shell

我有一个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部分。我只是将它们注释掉,以查看是否有任何更改(没有更改)。

2 个答案:

答案 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的回复。

该网站指出我在计算天数时未放入$(())来做错了算术