我有一个小的 bash 脚本来从我的网络服务器下载文件。我通过命令行传递 $File 变量,然后将其插入到 wget 命令中,如下所示:
File=${1}
wget -a /home/wgetlog.txt -nH -nd --accept=txt "http://192.168.1.21/files/$File/$File.txt"
如果我运行命令 ./download.sh media - 它会在日志文件中提供以下内容:
--2014-04-07 17:44:36-- http://192.168.1.21/files//.txt
HTTP request sent, awaiting response... 404 Not Found
是因为我并排传递变量吗?语法正确吗?或者有更好的方法来做到这一点:)
答案1
在编写采用命令行参数的脚本时,您应该真正检查给定的参数。
例如:
File=${1}
if [[ -z $File ]]
then
echo "ERROR: file name required"
exit
fi
echo wget -a /home/wgetlog.txt -nH -nd --accept=txt "http://192.168.1.21/files/$File/$File.txt"
我在这里猜测,但是如果您的脚本名为“doit.sh”并且您将其调用为:
doit.sh $File
并且 $File 未在您的命令行 shell 中定义,那么它将不会向您的脚本传递任何参数,因此您的脚本将以您描述的方式失败。
您需要使用真实的文件名来调用它。例如
doit.sh fred