我编写了一个简单的shell脚本来检查是否存在xml文件,如果存在,则将旧的xml文件重命名为backup,然后将新的xml文件移动到旧的xml文件所在的位置.
#!/bin/sh
oldFile="/Documents/sampleFolder/sampleFile.xml"
newFile="/Documents/sampleFile.xml"
backupFileName="/Documents/sampleFolder/sampleFile2.backup"
oldFileLocation="/Documents/sampleFolder"
if [ -f "$newFile" ] ; then
echo "File found"
#Rename old file
mv $oldFile $backupFileName
#move new file to old file's location
mv $newFile $oldFileLocation
else
echo "File not found, do nothing"
fi
Run Code Online (Sandbox Code Playgroud)
但是,每次我尝试运行脚本时,都会收到4个命令未找到的消息和语法错误:意外的文件结束.有关为什么我没有找到这些命令错误或意外结束文件的任何建议?我仔细检查了我关闭了所有的双引号,我有代码突出显示:)
编辑:运行脚本的输出:
: command not found:
: command not found:
: command not found1:
: command not found6:
replaceXML.sh: line 26: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
我相信你在Cygwin上运行.错误消息比您所看到的更多:
: command not found:
: command not found:
: command not found1:
: command not found6:
replaceXML.sh: line 26: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
您可能使用Windows编辑器来创建脚本文件,这意味着它使用Windows样式的CR-LF("\r\n")行结尾,而不是Unix样式的LF('\n')行结尾.Cygwin下的一些程序可以处理任何一种形式,但shell不能.
例如,看起来像的行
then
Run Code Online (Sandbox Code Playgroud)
看起来像shell一样
then^M
Run Code Online (Sandbox Code Playgroud)
其中^ M是ASCII CR字符.这实际上是一个有效的命令名称,如果它存在,但它没有,所以shell抱怨:
then^M: command not found
Run Code Online (Sandbox Code Playgroud)
但是打印CR字符会导致光标返回到行的开头,因此在:覆盖之前会先翻转.
你得到了"意外的文件结束"消息,因为shell从来没有看到fi匹配的if.
您可以使用该dos2unix命令修复行结尾.一定要阅读手册页(man dos2unix); 与大多数文本过滤器不同,dos2unix它替换了输入文件而不是写入stdout.
| 归档时间: |
|
| 查看次数: |
15101 次 |
| 最近记录: |