Bash - 语法错误:意外的文件结束

时间:2016-12-08 10:43:26

标签: bash

我根据某些日期条件编写了一个清理活动的脚本。但是我收到了一个错误。

#!/bin/bash
echo "Process Started"
Current_Date=`date +%Y-%m-%d`
echo "todays Date ==> $Current_Date"
fromDate=$1
toDate=$2
oldDate=`date --date="3 years ago" +%Y-%m-%d`
echo "Two Yrs Back Date ==> $oldDate"
if [ $toDate -le $oldDate ]
then
find . -type f -newermt $fromDate ! -newermt $toDate -exec truncate -s 0 {} \; && echo "truncated"
else
echo "todate should be less than three years"
fi
echo "Done"

获取错误 - line 15: syntax error: unexpected end of file 虽然第15行不存在脚本只有14行。 bash脚本运行正常,直到命令echo "Two Yrs Back Date ==> $oldDate"。 之后,它会在if条件开始时给出错误。 只是想检查我正在做的任何语法错误。

3 个答案:

答案 0 :(得分:1)

你有很多需要引用的扩展:

if [ "$toDate" -le "$oldDate" ]

find . -type f -newermt "$fromDate" ! -newermt "$toDate"

如果不了解您如何调用脚本,很难知道这些是否会导致您的问题,但无论如何都应该修复它们。

您可能会发现保持一致性并为变量引用变量也是有帮助的:

fromDate="$1"
toDate="$2"

你的脚本也在第9行失败,因为-le需要一个整数 - 你可能想给date一个格式字符串,例如+%s来获得可比较的整数。

顺便说一句,请不要在示例代码中添加truncate等破坏性命令 - 它应该仅适用于echo或其他内容。

答案 1 :(得分:0)

使用此:

#!/bin/bash

echo "Process Started"
Current_Date=$(date +%Y-%m-%d)
echo "todays Date ==> $Current_Date"

fromDate=$1
toDate=$2
oldDate=$(date --date="3 years ago" +%Y-%m-%d)
echo "Two Yrs Back Date ==> $oldDate"

if [[ "$toDate" < "$oldDate" ]] || [[ "$toDate" = "$oldDate" ]]; then
    find . -type f -newermt "$fromDate" ! -newermt "$toDate" -exec truncate -s 0 {} \; && echo "truncated"
else
    echo "todate should be less than three years"
fi
echo "Done"

您可以将lexicographically与条件构造[[]]进行比较。要比较bash中的日期,您需要使用:

[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of the conditional expression expression

摘自whoan

上的this post回答

使用shellcheck工具清除警告。并且不要忘记引用变量以避免问题! shellcheck显示的内容如下:^-- SC2053: Quote the rhs of = in [[ ]] to prevent glob matching

答案 2 :(得分:-1)

运算符-le用于比较整数,而不是字符串。

尝试

if [[ "$toDate" < "$oldDate" ]]

严格小于或

if [[ "$toDate" < "$oldDate" ]] || [[ "$toDate" = "$oldDate" ]]

为少或平等。

(见http://www.tldp.org/LDP/abs/html/comparison-ops.html