我制作了一个收集信息的脚本。它所做的事情之一是检查文件或目录是否存在。如果是,则将其复制到/tmp
目录中。
该脚本失败并显示
0403-057 第 3 行语法错误:“then”不匹配。
这是失败的语句:
if [ -d /etc/nginx ];
then
cp -R /etc/nginx/* /tmp/
fi
答案1
剧本很好。您描述的错误很可能意味着您有 Windows 样式的行结尾。我可以通过添加\r
到每行的末尾来重现它:
$ cat script.sh
if [ -d /etc/nginx ];
then
cp -R /etc/nginx/* /tmp/
fi
$ sed 's/$/\r/' script.sh
$ ksh script.sh
script.sh: syntax error at line 5: `if' unmatched
您可能在 Windows 计算机上编辑了该文件,并且会插入\r\n
行结尾而不是正常的 *nix\n
行结尾。只要删除它们就可以了:
sed -i 's/\r//' script.sh
但这可能不适用于 AIX sed
。如果没有,请改用这个:
sed 's/\r//' script.sh > tempFile && mv tempFile script.sh
或者
tr -d '\r' < script.sh > tempFile && mv tempFile script.sh