如何通过命令行将变量以参数的形式传递给bash脚本

嵌入式技术

1372人已加入

描述

我们在上一篇文章中介绍了如何在 bash 脚本中使用变量,可以响应各种数据以及接收用户输入。

今天我们将介绍如何通过命令行将变量以参数的形式传递给 bash 脚本。

向 bash 传递参数

下面脚本 count_lines.sh 将输出用户指定的文件的总行数:

Bash

例如,用户可以输入文件 /etc/passwd,脚本将输出行数:

Bash

脚本运行良好;然而,还有进一步优化的空间。

我们可以让用户在运行脚本时简单地将文件名作为命令行参数传递,而不是提示用户输入文件名,如下所示:

Bash

第一个 bash 参数(也称为位置参数)可以在 bash 脚本中使用 $1 访问。所以在 count_lines.sh 中,可以按如下方式将文件名变量替换为 $1:

Bash

我们去掉了第一个脚本中的 read 命令和第一个 echo 命令,这样脚本看起来更加简洁。

这样,在运行脚本的时候,可以将文件名作为参数传递:

Bash

传递多个参数

可以一次性向 bash 脚本传递多个参数。通常情况下,以下是向脚本传递多个参数的语法:

Bash

第二个参数将由 $2 变量引用,第三个参数由 $3 引用,以此类推。

这里大家可能有一个疑惑,第一个变量是 $1,那么 $0 是用来做什么的呢?其实 $0 变量用于 bash 脚本的名称。

现在我们再来修改一下 count_lines.sh 脚本文件,以便其可以计算多个文件的行数,如下:

Bash

运行脚本,并传递三个文件作为参数:

Bash

如上图所示,脚本输出了三个文件的行数;当然,有一点是不言而喻的,输出信息是依文件顺序的。

由 bash shell 中的参数想到的

Linux 有很多命令,其中有一些比较复杂,比如有很长的语法,或者很多的选项。不过我们可以通过使用 bash 参数,将那些很难的命令变为很简单的任务。

看如下 find.sh 脚本:

Bash

这是一个很简单但是很有用的脚本,提供文件名作为参数,脚本会打印出文件的位置:

Bash

通过上图可以看到,这个脚本比单纯的使用 find 命令要简单的多。这就说明了可以使用参数将 Linux 中比较复杂的命令转为比较简单的 bash 脚本。

上述脚本中的 2> /dev/null,是指将报错信息重定向到 /dev/null,也就是不打印报错信息。
 

bash shell 中的特殊变量

bash 中有很多内置的特殊变量,使用非常方便。如下是最常见的:

Bash

大家可以实际查看一下这些特殊变量,参考如下 variables.sh 脚本:

Bash

然后提供几个参数运行脚本:

Bash

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分