参数可能很有用,尤其是使用 Bash!
到目前为止,您已经学会了如何使用变量来使您的 bash 脚本是动态的和通用的,因此它可以响应各种数据和不同的用户输入。
在本教程中,您将学习如何将变量传递给 bash 来自命令行的脚本。
将参数传递给 a bash 外壳脚本
以下脚本 count_lines.sh
将输出用户输入的任何文件中存在的总行数:
#!/bin/bash
echo -n "Please enter a filename: "
read filename
nlines=$(wc -l < $filename)
echo "There are $nlines lines in $filename"
为了 example用户可以输入文件 /etc/passwd
结果脚本将吐出行数:
该脚本运行良好; 但是,有一个更好的选择!
我们可以让用户在运行脚本时简单地将文件名作为命令行参数传递,而不是提示用户输入文件名,如下所示:
./count_lines.sh /etc/passwd
首先 bash 参数(也称为位置参数)可以在您的 bash 脚本使用 $1
多变的。
因此,在 count_lines.sh 脚本中,您可以将文件名变量替换为 $1
如下:
#!/bin/bash
nlines=$(wc -l < $1)
echo "There are $nlines lines in $1"
请注意,我还去掉了 read 和 first echo 命令,因为它们不再需要了!
最后,您可以运行脚本并将任何文件作为参数传递:
./count_lines.sh /etc/group
There are 73 lines in /etc/group
将多个参数传递给 bash 外壳脚本
您可以将多个参数传递给您的 bash 脚本。 一般来说,这是将多个参数传递给任何 bash 脚本:
script.sh arg1 arg2 arg3 …
第二个参数将被 $2
变量,第三个参数被引用 $3
, .. ETC。
这 $0
变量包含您的名称 bash 脚本以防您想知道!
现在我们可以编辑我们的 count_lines.sh
bash 脚本,以便它可以计算多个文件的行数:
#!/bin/bash
n1=$(wc -l < $1)
n2=$(wc -l < $2)
n3=$(wc -l < $3)
echo "There are $n1 lines in $1"
echo "There are $n2 lines in $2"
echo "There are $n3 lines in $3"
您现在可以运行脚本并将三个文件作为参数传递给 bash 脚本:
如您所见,脚本输出三个文件中每个文件的行数; 不用说,论点的顺序很重要,当然。
在 Bash shell 中使用参数获得创意
那里有很多 Linux 命令。
其中一些有点复杂,因为它们可能有很长的语法或您可以使用的大量选项。
幸运的是,您可以使用 bash 将硬命令变成一项非常简单的任务的论据!
为了演示,请看以下内容 find.sh
bash 脚本:
#!/bin/bash
find / -iname $1 2> /dev/null
这是一个非常简单的脚本,但可以证明非常有用! 您可以提供任何文件名作为脚本的参数,它将显示文件的位置:

您会发现这比输入整个 find 命令要容易得多! 这证明您可以使用参数将 Linux 中任何冗长的复杂命令变为简单的 bash 脚本。
如果您想知道 2> /dev/null
,这意味着屏幕上不会显示任何错误消息(如文件无法访问)。 我建议阅读 Linux 中的 stderr 重定向以获取有关此主题的更多知识。
额外提示:Bash shell 中的特殊变量
Bash 有很多内置的特殊变量,这些变量非常方便,可供您使用。
下表重点介绍了最常见的特殊内置 bash 变量:
特殊变量 | 描述 |
---|---|
$0 | 的名称 bash 脚本。 |
$1, $2…$n | 这 bash 脚本参数。 |
$$ | 当前 shell 的进程 ID。 |
$# | 传递给脚本的参数总数。 |
[email protected] | 传递给脚本的所有参数的值。 |
美元? | 最后执行的命令的退出状态。 |
美元! | 最后执行的命令的进程 ID。 |
查看这些特殊变量的作用; 看看以下 variables.sh
bash 脚本:
#!/bin/bash
echo "Name of the script: $0"
echo "Total number of arguments: $#"
echo "Values of all the arguments: [email protected]"
您现在可以传递所需的任何参数并运行脚本:

好的,这将我们带到本章的结尾。 我希望你现在意识到它是多么强大和有用 bash 论据可以。
需要一些练习,下载此 PDF 并练习将参数传递给 bash 具有简单脚本挑战的脚本。 他们的解决方案也包括在内。
Bash 第 3 章练习题问题及其解决方案,用于练习您在本章中刚刚学到的内容 Bash-Chapter-3-Practice-Questions-Linux-Handbook.pdf 30 KB
下载圈
在那之后,看看下一章我将展示你可以在你的 bash 脚本。