Contents

如何将命令行参数传递给bash脚本

1. 概述

Linux 有一套丰富而强大的方法来为 bash 脚本提供参数。 在本教程中,我们将介绍几种执行此操作的方法。

2. 参数列表

参数可以在执行期间以列表形式传递给 bash 脚本,在脚本文件名后面用空格分隔。当脚本必须根据输入的值执行不同的功能时,这会派上用场。 例如,让我们向脚本 start.sh传递几个参数:

sh start.sh development 100

2.1.使用单引号

如果输入列表的参数包含由空格分隔的多个单词,则需要将它们括在单引号中。

例如,在上述示例中,如果要传递的第一个参数是development mode而不是development,则应将其括在单引号中并作为*‘development mode’*传递:

sh start.sh 'development mode' 100

2.2. 使用双引号

需要评估的参数在作为输入传递之前必须用双引号引起来。

考虑一个 bash 脚本copyFile.sh,它接受两个参数:文件名和将其复制到的目录:

sh copyFile.sh abc.txt "$HOME"

在这里,$HOME变量被评估到用户的主目录,评估结果被传递给脚本。

2.3. 转义特殊字符

如果需要传递的参数有特殊字符,则需要使用反斜杠对其进行转义:

sh printStrings.sh abc [[email protected]](/cdn_cgi/l/email_protection) cd\$ 1\*2

字符 $ 和 * 不属于安全集,因此使用反斜杠进行转义。

这些使用单引号、双引号和转义字符的规则对于后续部分也保持不变。

3. 参数

参数也可以在标志的帮助下传递给 bash 脚本。这些标志通常是前面带有连字符的单字符字母。标志的相应输入值在它旁边指定,用空格分隔。

让我们考虑以下用户注册脚本示例userReg.sh,它采用 3 个参数:用户名全名年龄

sh userReg.sh -u abc -f Abc -a 25

在这里,脚本的输入是使用标志(ufa)指定的,脚本通过基于标志获取相应的值来处理此输入。

4.环境变量

Bash 脚本也可以使用环境变量形式的参数传递。这可以通过以下任一方式完成:

  • 在脚本执行命令之前指定变量值
  • 导出变量然后执行脚本

让我们看看下面的脚本processor.sh 示例,它以两个变量var1var2作为输入。

如上所述,这些变量可以作为脚本的输入:

var1=abc var2=c\#1 sh processor.sh

在这里,我们首先在同一命令中调用脚本执行之前指定var1var2变量的值。

也可以通过将var1var2导出为环境变量然后调用脚本执行来实现相同的目的:

export var1=abc
export var2=c\#1
sh processor.sh

5. 最后一个参数运算符 ( !$ )

上一个命令的最后一个参数,由*!$*引用,也可以作为参数传递给 bash 脚本。 假设我们再次复制文件,目标是用户主目录。使用最后一个参数运算符,我们可以将输入传递给脚本:

cd $HOME
sh copyFile.sh abc.txt !$

在第一个命令中,我们导航到用户主页,当调用第二个命令时,!$被评估为前一个命令的最后一个参数$HOME,因此结果命令被评估为:

sh copyFile.sh abc.txt $HOME

6. 管道运算符 ( | )

管道运算符 (|) 与xargs命令组合可用于将输入提供给 bash 脚本。

让我们回顾一下printStrings.sh脚本的早期示例,该脚本将输入作为字符串列表并打印出来。

无需在命令行中将这些字符串作为参数传递,而是可以将它们添加到文件中。然后,在管道运算符和 xargs 命令的帮助下,这个文件可以用作输入:

cat abc.txt | xargs printStrings.sh

在这里,cat命令输出已添加到文件中的字符串。然后这些通过管道操作符传递给xargs命令,该操作符收集此列表并将其传递给脚本。