如何将命令行参数传递给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
在这里,脚本的输入是使用标志(u,f和a)指定的,脚本通过基于标志获取相应的值来处理此输入。
4.环境变量
Bash 脚本也可以使用环境变量形式的参数传递。这可以通过以下任一方式完成:
- 在脚本执行命令之前指定变量值
- 导出变量然后执行脚本
让我们看看下面的脚本processor.sh 示例,它以两个变量var1和var2作为输入。
如上所述,这些变量可以作为脚本的输入:
var1=abc var2=c\#1 sh processor.sh
在这里,我们首先在同一命令中调用脚本执行之前指定var1和var2变量的值。
也可以通过将var1和var2导出为环境变量然后调用脚本执行来实现相同的目的:
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命令,该操作符收集此列表并将其传递给脚本。