当我在命令中输入变量名称时 wget 失败

当我在命令中输入变量名称时 wget 失败

我有一个小的 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

相关内容