嵌入式Linux shell(BusyBox)检查文件列表(如果存在)并运行命令

时间:2014-05-01 08:54:36

标签: linux shell embedded

我尝试下载文件列表(文本文件,每行一个文件名,文件名中没有空格或换行符),然后检查每个文件是否存在并相应地运行命令。第一部分似乎工作得很好,下载了来自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服务器文件中的行结尾如何,脚本如何才能工作?

1 个答案:

答案 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)