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
等。问题是什么?可能的重复