我根据某些日期条件编写了一个清理活动的脚本。但是我收到了一个错误。
#!/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
条件开始时给出错误。
只是想检查我正在做的任何语法错误。
答案 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" ]]
为少或平等。