如何让 bash 脚本中的变量对应于 wget 中的 url
How do I have a variable in a bash script correspond to the url in wget
例如,我有一个名为 getimage
的 bash 脚本。在脚本中我有:
wget http://www.example.com/images/1.jpg
如果我在终端输入 bash getimage
,它会下载图片。
但我想要的是在终端输入bash getimage 2
或bash getimage 3
等,然后分别下载2.jpg
或3.jpg
。
基本上,我想在终端中输入一个数字 (bash getimage number
) 并让它对应于 wget http://www.example.com/images/number.jpg
.
正如 Aaron 在评论中提到的,您需要通过在脚本中将变量指定为 </code> 或 <code>
等来从外部提供变量。
这样做的方法是-
wget http://www.example.com/images/"".jpg
然后以 bash getimage 1
启动脚本
如果(我怀疑)你想 wget
循环,做-
for i in {1..10} ; do bash getimage "$i" ; done
或者从命令行,
for i in {1..10} ; do wget http://www.example.com/images/"$i".jpg ; done
这是我会做的:
#!/bin/bash
image_name=${1-1}
wget "http://www.example.com/images/$image_name.jpg"
该脚本将被调用为 getimage x
。如果 x
被省略,1
将被选为默认值。
第一行是一个 shebang:它告诉您 shell 使用指定的可执行文件 /bin/bash
.
执行脚本
第二行定义了一个image_name
变量,并将表达式的结果赋给它。该表达式是一个参数扩展,如果已定义,它将 return </code>(即传递给脚本的第一个参数),或者 <code>1
。在这种情况下很难看到,但语法是 ${variable-default}
,其中 variable
是您想要其值的变量名称,而 default
是未定义该变量时使用的默认值。
第三行是您的命令,其中静态 1
已替换为对 image_name
变量的引用。请注意,已添加 ""
以防 image_name
包含空格:这会将 url 分为两部分,wget
会将其理解为两个单独的参数。但是不要使用 ''
,字符串中包含的 $variable
不会扩展为它们的值。
您想要的最小脚本如下。
#!/usr/bin/env bash
wget "http://www.example.com/images/.jpg"
第一行调用了一个shebang The shebang tells the script which program to run it in. In this case we use the env程序,用于查找当前环境中bash的默认版本
在第二行,我们简单地 运行 您的 wget
命令,但我们传入了变量 </code>。这是一个称为 <a href="http://wiki.bash-hackers.org/scripting/posparams" rel="nofollow noreferrer">positional parameter</a> 的特殊变量,在本例中是传递给脚本的第一个参数。</p>
<p>为了 运行 命令,使用 <code>chmod +x getimage
使其可执行,然后像这样调用它:
./getimage 1
./getimage 2
etc.
例如,我有一个名为 getimage
的 bash 脚本。在脚本中我有:
wget http://www.example.com/images/1.jpg
如果我在终端输入 bash getimage
,它会下载图片。
但我想要的是在终端输入bash getimage 2
或bash getimage 3
等,然后分别下载2.jpg
或3.jpg
。
基本上,我想在终端中输入一个数字 (bash getimage number
) 并让它对应于 wget http://www.example.com/images/number.jpg
.
正如 Aaron 在评论中提到的,您需要通过在脚本中将变量指定为 </code> 或 <code>
等来从外部提供变量。
这样做的方法是-
wget http://www.example.com/images/"".jpg
然后以 bash getimage 1
如果(我怀疑)你想 wget
循环,做-
for i in {1..10} ; do bash getimage "$i" ; done
或者从命令行,
for i in {1..10} ; do wget http://www.example.com/images/"$i".jpg ; done
这是我会做的:
#!/bin/bash
image_name=${1-1}
wget "http://www.example.com/images/$image_name.jpg"
该脚本将被调用为 getimage x
。如果 x
被省略,1
将被选为默认值。
第一行是一个 shebang:它告诉您 shell 使用指定的可执行文件 /bin/bash
.
第二行定义了一个image_name
变量,并将表达式的结果赋给它。该表达式是一个参数扩展,如果已定义,它将 return </code>(即传递给脚本的第一个参数),或者 <code>1
。在这种情况下很难看到,但语法是 ${variable-default}
,其中 variable
是您想要其值的变量名称,而 default
是未定义该变量时使用的默认值。
第三行是您的命令,其中静态 1
已替换为对 image_name
变量的引用。请注意,已添加 ""
以防 image_name
包含空格:这会将 url 分为两部分,wget
会将其理解为两个单独的参数。但是不要使用 ''
,字符串中包含的 $variable
不会扩展为它们的值。
您想要的最小脚本如下。
#!/usr/bin/env bash
wget "http://www.example.com/images/.jpg"
第一行调用了一个shebang The shebang tells the script which program to run it in. In this case we use the env程序,用于查找当前环境中bash的默认版本
在第二行,我们简单地 运行 您的 wget
命令,但我们传入了变量 </code>。这是一个称为 <a href="http://wiki.bash-hackers.org/scripting/posparams" rel="nofollow noreferrer">positional parameter</a> 的特殊变量,在本例中是传递给脚本的第一个参数。</p>
<p>为了 运行 命令,使用 <code>chmod +x getimage
使其可执行,然后像这样调用它:
./getimage 1
./getimage 2
etc.