日期上的ksh脚本语法错误

时间:2017-09-11 09:54:01

标签: unix ksh

我的shell脚本在此部分失败

dt=$(date +%Y%m%d)

syntax error at line 35: `dt=$' unexpected

这有点奇怪,因为我使用相同的方式来获取日期时间并且没有任何问题

timestamp=$(date +%Y%m%d%H%M%S)

20170911105251

我已经在Notepad ++中检查过,我没有任何脏字符,如下面的@Frank所示

enter image description here

以下是我的示例脚本。请注意我省略了一些保密的部分。基本上,脚本根据指定的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

1 个答案:

答案 0 :(得分:1)

很有道理,当你从任何地方复制文本并粘贴到文件中时(我认为你这样做了),它可以添加&#34;脏&#34;人物。 如果您有像notepad ++这样的文本编辑器,请单击:

enter image description here

它将显示所有角色。

通过notepad ++,你可以通过右键点击页面右下角的方式将文件格式从windows更改为unix:

enter image description here

保存文件并再次发送到您的计算机。 语法似乎正确,所以它应该可以工作。

无论如何我提到了notepad ++,但你可以和其他文本编辑器一起使用。

dt=$(date +'%Y%m%d') dt=$(dt +'%Y%m%d')

以下工作示例:

!/usr/bin/bash
if [ -z $1 ]
then
    dt=$(date +'%Y%m%d')
else
    dt=$1
fi
echo $dt

结果:

XXXXXXXXXXXXXX:/ pathtosh&GT; prova.sh

20170911

XXXXXXXXXXXXXX:/ pathtosh&GT; prova.sh 1

1