我尝试下载文件列表(文本文件,每行一个文件名,文件名中没有空格或换行符),然后检查每个文件是否存在并相应地运行命令。第一部分似乎工作得很好,下载了来自Web服务器的文件,第一个echo输出文件名。但文件存在检查不起作用。
#!/bin/sh
wget -qO- http://web.server/x/files.txt | while read file
do
echo $file
if [ -f $file ]; then
echo $file exists
else
echo $file does not exist
fi
done
在第二个文件(temp.txt)存在的目录中执行时输出:
file1.tmp
does not exist
temp.txt
does not exist
file3.tmp
does not exist
file4.tmp
does not exist
第二个文件确实存在,if语句中的echo命令显然也不识别$ file变量。
任何帮助表示赞赏,我尝试将此处与此处的信息一起拼凑起来。问题可能是这不是一个完整的Linux系统,而是带有BusyBox v1.22.1的嵌入式Linux(OpenELEC)。
更新:感谢评论者,我们发现代码基本上工作得很好,因为来自网络服务器的files.txt只包含unix EOL - 它没有&#t; t使用Windows CRLF行结尾。
现在,无论Web服务器文件中的行结尾如何,脚本如何才能工作?
答案 0 :(得分:1)
dos2unix
是一个将Windows行结尾转换为Unix行结尾的实用程序。您可以在脚本中使用它,如下所示:
wget -qO- http://web.server/x/files.txt | dos2unix | while read file
或者:
while read line; do
...
done < <(wget -qO- http://web.server/x/files.txt | dos2unix)