我已经编写了下面的脚本,但是当我从它所在的目录(以及文件)运行它时
bash xmlimport-magento2.sh
我收到此错误消息:
xmlimport-magento2.sh: line 7: syntax error near unexpected token $'do\r''
mlimport-magento2.sh: line 7: do
#!/bin/bash
if exists *.ZIP
then
# disable autoindexing
#php -f "$MAGEPATH"shell/indexer.php -- --mode-manual all
for file in `ls *.ZIP`
do
# Backup zip file
cp $file /backups
# Extract XML files
unzip -P web $file
# Delete zip file
rm -f $file
# rename xml files
# hier komt procedure die controleert of bestand xxx*basic.xml bestaat en zo ja dan wordt dit bestand hernoemt en daarna geexecuteerd
if [ -f "*basic.xml" ]
then
mv *_BASIC.XML BASIC.XML
php -f bin/magento import:job:run 1
fi
# rename xml files
# hier komt procedure die controleert of bestand xxx*prices.xml bestaat en zo ja dan wordt dit bestand hernoemt en daarna geexecuteerd
if [ -f "*prices.xml" ]
then
mv *_PRICES.XML PRICES.XML
php -f bin/magento import:job:run 4
php -f bin/magento import:job:run 2
fi
# rename xml files
# hier komt procedure die controleert of bestand xxx*stock.xml bestaat en zo ja dan wordt dit bestand hernoemt en daarna geexecuteerd
if [ -f "*stockinfo.xml" ]
then
mv *_STOCKINFO.XML STOCKSTOCK.XML
php -f bin/magento import:job:run 3
fi
done
# verplaats .XML files naar backup
cp -f $file ../backups
# Delete XML files
rm -f *.XML
fi
答案1
首先,CRLF 换行符存在明显的问题,\r
错误消息中的 是一个明显的标志。参见例如如何在 Unix 和 Windows 换行符格式之间批量转换文件系统分支中的所有文件?关于如何解决这个问题。
那么,你有
if exists *.ZIP
then
这也可能是 DOS 主义,至少我没有听说过名为 的实用程序exists
。
也在这里:
for file in `ls *.ZIP`
是无用的使用ls
。所发生的情况是,shell 扩展了文件名模式*.ZIP
,将结果传递给ls
...,只是打印出相同的名称。除了您遇到结果分词问题之外。
使用以下命令代替这两个:
shopt -s nullglob
for file in ./*.ZIP; do
...
done
首先,shell 非常能够列出匹配的文件名(这就是您上面使用 所做的exists *.ZIP
)。然后,nullglob
如果没有匹配的文件,Bash会使模式扩展为空。否则,您可能会收到有关字面上称为*.ZIP
“不存在”的文件的错误。在模式前加上前缀./
可以消除以破折号开头的文件名的一些潜在问题。
此外,您一直使用不带引号的扩展$file
,即rm -f $file
,而不是rm -f "$file"
。这也会导致分词问题,请参阅:
还,
if [ -f "*basic.xml" ]
这是行不通的,因为引号会阻止模式扩展到实际的文件名。它会寻找一个字面上称为*basic.xml
.如果您确定只能进行一场比赛,那么就if [ -f *basic.xml ]
可以。如果有更多,就会产生错误,因为测试会得到太多参数。
BASIC.XML
另外,除非是现有目录,否则这可能会出错。
mv *_BASIC.XML BASIC.XML
好的,我认为建议将脚本分成较小的部分,并单独测试它们(可能撒上一些调试输出),这将是一个好主意。