【发布时间】:2017-09-12 09:18:57
【问题描述】:
我的 shell 脚本在这部分失败了
dt=$(date +%Y%m%d)
syntax error at line 35: `dt=$' unexpected
这有点奇怪,因为我使用它来获取日期时间并且没有任何问题
timestamp=$(date +%Y%m%d%H%M%S)
20170911105251
我已经在 Notepad++ 中检查过,我没有下面@Frank 建议的任何脏字符
以下是我的示例脚本。请注意,我省略了一些保密的部分。基本上,脚本根据指定的 dt 将文件从服务器 A 传输到 B。如果执行过程中没有指定日期参数,则取当前日期。
if [ -z "$1" ]
then
dt=$(date +%Y%m%d)
else
dt=$1
fi
export rundate
timestamp=$(date +%Y%m%d%H%M%S)
logfile=${log_path}/${batch}-${dt}-${timestamp}.log
mail_file=${log_path}/${batch}-mail-${timestamp}.txt
export mail_file
filecount=$(wc -l ${batch_filelist} | cut -d " " -f 1)
sftp ${dest} <<EOF >> $logfile
cd $destdir
lcd $sourcedir
put -p *.txt
exit
EOF
mail -s "SFTP Done (dt:$dt)" $(cat $email_accounts) < $mail_file
【问题讨论】:
-
我从您的屏幕截图中看到您正在尝试运行名为
dt:dt=$(dt ...的命令——但这并不能解释错误消息。你确定要显示第 35 行吗? -
@glennjackman - 最初的帖子只包含我脚本的一部分。为了清楚起见,我已经包含了整个内容。
-
我已经用一个工作示例编辑了我的答案
-
仍然,您正在尝试调用命令
dt -
在问题的开头,您声明
dt=$(date +%Y%m%d)造成问题...注意对日期的引用;但是这段代码在您的完整脚本中不存在;在您的完整脚本中,您有dt=$(dt +%Y%m%d)... 注意对 dt 而不是 date 的引用;除非dt(右侧)是用户定义的别名/功能/脚本,否则会导致错误(例如,dt是无效命令);考虑将此命令更改为dt=$(date ...)