Bash是一种强大的脚本语言,由各种Linux发行版、Unix和BSD提供。如果我们需要使脚本动态化,我们通常使用参数。参数通过命令行提供给脚本。在本教程中,我们将研究参数传递的不同用例和示例。
语法
为了在bash脚本中使用外部提供的值,我们应该在脚本名称之后提供它们。下面的语法假设脚本是可执行的。
myscript.sh PARAM1 PARAM2 ...
或者我们可以用 bash
为了解释下面的脚本并提供参数。
bash myscript.sh PARAM1 PARAM2 ...
提供参数
我们已经学会了论点的语法。在本例中,我们将查看有关参数传递的用例。例如,我们将提供两个参数。
$ myscript.sh 1 3
如果我们需要提供一个包含多个单词的字符串,我们可以使用单引号或双引号。在这个例子中,我们将证明 10
和 Hello Poftut
作为两个独立的论点。
$ myscript.sh 10 "Hello Poftut"
读取脚本中的参数
现在真正的工作开始了。我们已经学习了如何从shell或命令行提供参数。在这一部分中,我们将了解如何在脚本中阅读它们。Bash提供 $1
, $2
, … 类似于在脚本中读取输入参数的用法。可以从变量名访问第一个参数 $1
,第二个 $2
所以…在这个例子中,我们将提供两个参数 Hello
和 Poftut
编写脚本。
#!/bin/bash echo $1 $2

检测命令行参数
如果为脚本提供了一些命令行参数,那么我们可以使用$1、$2、$3、…变量来检测命令行参数。我们可以使用if语句检查特定的输入,如下所示。下面我们将检查位置参数1,如果它包含某个值,该值将打印到屏幕上。
#!/bin/bashif [ "$1" != "" ]; then echo "Positional parameter 1 contains value" echo $1else echo "Positional parameter 1 is empty"fi
将提供的参数赋给Bash变量
bash变量的另一个用例是用有意义的名称为它们分配新的变量。这将使我们能够更改提供的值,并将它们与名称一起正确使用。在这个例子中,我们将 Hello
和 Poftut
转换为名为 salute
和 name
.
#!/bin/bash salute=$1 name=$2 echo $salute $name

用For或While读取多个参数
有些时候,有些参数不适合我们的条件,我们可能需要大量的参数来以迭代的方式提供和使用它们。在这种情况下,我们可以使用bash循环机制 for
和 while
. 我们可以迭代给定的参数,比如数组或列表 for
和 while
. 在本例中,我们将迭代提供的参数并将它们打印到shell中。我们将使用 [email protected]
指定所提供参数的列表,并将每个项放入名为 var
在每一步中。
#!/bin/bash for var in "[email protected]" do echo $var done

用参数名读取
作为常规的Linux应用程序,我们可以使用参数名作为参数并相应地解析它们。我们将使用 getops
函数,它将解析数组中提供的选项。在本例中,我们将使用 while
循环 case
结构。我们将解析提供的参数名 u
用户名和 p
密码。
#!/bin/bash while getopts u:p: option do case "${option}" in u) USER=${OPTARG};; p) PASSWORD=${OPTARG};; esac done echo "User:"$USER echo "Password:"$PASSWORD

使用getopts函数读取Bash参数
Bash提供了不同的函数来读取Bash输入参数。 getopts
是一个函数,可用于读取指定的命名参数并以简单的方式将其设置到bash变量中。getoptst将读取每个输入参数,并查找要匹配的选项,如果匹配,则将参数值设置为给定的变量名。
while getopts u:a:l: optiondocase "${option}"inu) USER=${OPTARG};;a) AGE=${OPTARG};;l) LOCATION=${OPTARG};;esacdoneecho "Given user name is: "$USERecho "Given age is: "$DATEecho "Given location is: "$LOCATION
我们可以像下面那样运行这个脚本,但是在运行之前,我们必须使用chmod命令使脚本可以运行。
$ chmod u+x getopts_example.sh$ ./getopts_example.sh -u ismail -a 36 -l Turkey
![图片[5]-如何传递和解析Linux Bash脚本参数-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2020/04/poftut_image-69.png)
获取传递的参数数
Bash提供与 $#
变量。我们可以得到传递参数的数量,并用于不同的情况,下面我们将打印传递给终端的参数数量。
#!/bin/bashecho "You provided $# arguments"
![图片[6]-如何传递和解析Linux Bash脚本参数-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2020/04/poftut_image-70.png)
打印所有参数的值
我们还可以用一个变量打印所有提供的参数或值 [email protected]
.
#!/bin/bashecho "All Arguments values:" [email protected]
![图片[7]-如何传递和解析Linux Bash脚本参数-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2020/04/poftut_image-71.png)
相关文章: linuxtee命令教程及Stdout管理示例