Linux中的shell脚本答应你编写带有硬编码值的程序和能够在运转时接受用户输入的程序。这些用户输入被称为参数或论据。咱们所有的人一般都了解向shell脚本传递一般参数。但是,你有时或许会觉得需要向你的shell脚本传递 “命名参数”。这篇文章将引导你了解什么是命名参数以及它们在shell脚本中的必要性。之后,咱们将共享一个在Ubuntu 20.04中向shell脚本传递命名参数的广泛比如。

Ubuntu 20.04中Shell脚本中的命名参数

现在,咱们清楚地了解到,在Ubuntu 20.04中,咱们能够很容易地编写这样的shell脚本,它能够在终端履行这些脚本时从用户那里获取参数作为输入。但是,一种不同类型的参数被称为 “命名参数”,也通常在shell脚本中运用。一个命名的参数是由 “名-值 “对来标志的。这个 “名-值 “对是在shell脚本中界说的,相应的参数在履行脚本时的传递方式与你传递一般参数的方式相同。

那么在shell脚本中运用命名参数的含义是什么呢?嗯,有时候,你在你的shell脚本中界说了参数,但在运转这些脚本时,你或许不一定需要供给所有的参数。命名参数答应你在运转脚本时越过这些参数的值,只要你想。在这种状况下,假如你运用一般的参数,你的体系就会呈现过错信息,假如你在脚本中越过任何预先界说的参数,就不会答应你持续履行你的脚本。

此外,有时你也或许在运转shell脚本时改动参数的传递次序,也就是说,你以随机的次序传递参数,而不是依照在shell脚本中声明变量的次序。而另一方面,假如你在这种状况下运用一般的参数,那么相同会因为没有遵从正确的参数次序而发生一个过错信息。因而,你能够说,命名参数在供给输入时为用户供给了更多的灵活性,而不是限制他们。

现在,当你意识到在shell脚本中运用命名参数的重要性时,让咱们看看咱们如安在Ubuntu 20.04体系的shell脚本中运用这些参数。

在Ubuntu 20.04体系中向shell脚本传递命名参数的比如

为了在Ubuntu 20.04中向shell脚本传递命名参数,咱们设计了一个shell脚本,如下图所示。咱们将在本节顶用不同的参数或输入值来履行这个shell脚本。

如何在Shell脚本中传递一个命名参数?

在这个shell脚本中,咱们在shell的while循环中运用了内置的 “getopts “函数。这个函数基本上从用户那里获取命名的参数作为输入。然后,咱们界说了三种不同的状况,即 “n、a和g”,别离对应于咱们的变量 “名字、年纪和性别”。这些事例是针对 “flag “变量界说的,咱们的case-esac句子将在此基础上履行。在shell中的case-esac句子基本上等同于C语言中的Switch句子。然后,在case-esac块中,咱们列出了之前声明的所有三种状况,即n、a和g。在每个状况下,咱们都声明了一个变量,该变量相当于用户在履行脚本时供给的输入参数。每次履行这个脚本时,用户供给的每个参数都将被分配给相关的变量。然后,咱们最终有三个 “echo “指令,别离用来打印名字、年纪和性别这些变量的值。

在设计好这个脚本之后,咱们将首要依照正确的次序用正常命名的参数来履行它,如下所示。

$ bash Named.sh –n Aqsa –a 27 –g Female

这儿,Named.sh代表咱们的shell脚本的名称。此外,你能够从这个指令中看到,咱们首要列出了标志,然后是它们各自要传递的参数。别的,你能够清楚地注意到,咱们是依照咱们的shell脚本中界说的参数的切当次序来传递这些参数的。

现在,当这个shell脚本被履行时,你将能够在终端上看到分配给所有命名参数的值,如下图所示。

如何在Shell脚本中传递一个命名参数?

一旦咱们依照正常的流程履行了这个脚本,咱们能够做一个小试验,用相同的输入值但以稍微不同的次序来履行这个shell脚本,如下面的指令所示。

$ bash Named.sh –n Aqsa –g Female –a 27

你能够看到在这个指令中,咱们改动了性别和年纪参数的次序,与最初在shell脚本中界说的次序不同。现在,咱们将测验找出这些值是否正确分配给咱们的命名参数。

当这个指令被履行时,你将能够从它的输出中看到,不管在履行shell脚本时参数的传递次序如何,它们仍然会被分配到正确的变量中,如下图所示。

如何在Shell脚本中传递一个命名参数?

在某些状况下,用户或许不想露出自己的年纪。在这种状况下,他/她将以如下方式履行这个shell脚本。

$ bash Named.sh –n Aqsa –g Female

在这个shell脚本的输出中,当它以上述参数履行时,你能够清楚地看到咱们的体系没有发生任何过错信息;相反,它以所供给的参数顺畅地履行了咱们的脚本,而将Age变量留空。

如何在Shell脚本中传递一个命名参数?

以相同的方式,你也能够测验越过性别变量,而只供给名字变量的值,办法如下。

$ bash Named.sh –n Aqsa

这个指令的相应输出显示在下面的图片中。

如何在Shell脚本中传递一个命名参数?

最终,咱们将测验在不供给任何参数的状况下履行这个脚本,办法如下。

$ bash Named.sh

相同,你能够从下面的输出中看到,没有过错信息发生;相反,咱们的脚本在没有供给任何参数的状况下也已经成功履行了。

如何在Shell脚本中传递一个命名参数?

总结

从本教程所讨论的具体比如中,咱们能够得出结论:不管向shell脚本供给的命名参数的次序如何,它都会被成功履行。此外,即使你不给你的脚本供给任何参数,它仍然能够在没有任何过错的状况下被履行。但是,在传递命名参数时,你仅有需要注意的是,在履行你的shell脚本时,要运用正确的标志和相应的值。