Linux 将字符串传递给脚本

Linux 将字符串传递给脚本,linux,bash,Linux,Bash,我有一个脚本,download,它接受一个字符串并检查文件是否具有该字符串的文件名。如果没有,它就会下载它。所有文件名都在一个文件中 此命令不起作用: cat filenames | ./download 下载来源: filename=$1 if [ ! -f $1 ]; then wget -q http://www.example.com/nature/life/${filename}.rdf fi 示例文件名文件: file1 file2 file3 file4 如何

我有一个脚本,
download
,它接受一个字符串并检查文件是否具有该字符串的文件名。如果没有,它就会下载它。所有文件名都在一个文件中

此命令不起作用:

cat filenames | ./download
下载来源:

filename=$1
if [ ! -f $1 ];
then
        wget -q http://www.example.com/nature/life/${filename}.rdf
fi
示例文件名文件:

file1
file2
file3
file4

如何将命令输出从cat传递到下载脚本?

您可以将文件名传递到包含脚本文件名的文件:

./download filenames
然后从
$1
中的文件名循环浏览文件名:

$!/bin/bash
# Do sanity check

fname=$1

for f in $(<$fname); do
   if [ ! -f "$f.rdf" ]; then
     wget -q http://www.example.com/nature/life/${f}.rdf
   fi
done
$/bin/bash
#做精神检查
fname=$1

对于$中的f(在脚本中,
$1
是命令行上的位置参数。
/download somefile
可以工作,但是
cat filename./download
将数据流式传输到下载中,您可以忽略它

您应该阅读,这将为bash脚本的工作方式提供良好的基础。若要解决此问题,请将命令更改为:

cat filename | xargs -n 1 ./download
这将为列表中的每个文件名运行
/download
。但是,文件名中可能有空格或其他特殊字符,这会破坏您的脚本。您应该研究其他方法来避免这些问题


具体地说,使用a读取文件。如果文件输入正确,这将正确转义每行的文件名。这样,您就避免了cat在文件名方面可能遇到的问题,如:
fi/\nle

您想要
/download filename1 filename2
等。问题是什么?可能的重复