我尝试下载一个文件列表(文本文件,每行一个文件名,文件名中没有空格或换行符),然后检查每个文件是否存在并相应地运行命令。第一部分似乎工作得很好,从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语句中的回音命令显然也不承认$file变量。
感谢你的帮助,我试着把这里的信息拼凑起来一个问题可能是这不是一个完整的linux系统,而是BusyBox v1.22.1的嵌入式linux(OpenELEC)。
更新:多亏了评论员,我们发现只要来自web服务器的files.txt只包含unix EOL,代码as基本上就可以正常工作——它不适用于windows CRLF行结尾。
现在,如何使脚本工作,而不考虑来自web服务器的文件中的行尾?
最佳答案
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)
关于linux - 嵌入式Linux Shell(BusyBox)检查文件列表(如果存在)并运行命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23404720/