如何在 Bash 脚本中传递命令行参数
引言
对于 Linux 系统管理员和开发人员来说,编写 Bash 脚本的能力非常重要。它使我们能够自动化常规流程,轻松完成困难的流程。bash 脚本最重要的方面之一是能够在脚本执行期间向其提供信息。通过命令行参数,可以更改脚本的行为,而无需更改其代码。
本文将讨论在 bash 脚本中使用命令行参数。我们将讨论一些处理命令行参数的方法,并针对每种方法提供说明。阅读完本文后,我们将能够自信地在 bash 脚本中使用命令行参数。
在命令行参数中使用位置参数
在 bash 脚本中使用命令行参数最简单的方法是使用位置参数。变量 $1 存储第一个参数,变量 $2 存储第二个参数,以此类推。
以下脚本使用了位置参数 −
#!/bin/bash echo "Name, $1" echo “Age, $2”
让我们查看输出。
$ ./hello.sh Somdeb 22
脚本将返回以下结果 −
Name, Somdeb “Age, 22”
"Getopts" 用于解析命令行参数
Getopts 是一个内置的外壳命令,它允许我们灵活、高效地解析命令行选项和参数。Getopts 使用 while 循环来遍历每个命令行参数并解析其选项。
这里有一个使用 getopts 的示例脚本 −
#!/bin/bash while getopts ":a:b:" opt; do case ${opt} in a ) echo "Option -a stores the value: $OPTARG" ;; b ) echo "Option -b htores the value: $OPTARG" ;; \? ) echo "Wrong option: -$OPTARG" 1>&2 ;; : ) echo "Option -$OPTARG requires an argument." 1>&2 ;; esac done
此脚本使用 getopts 命令转换 -a 和 -b 命令行参数。每个选项字母后面的冒号 (:) 表示它需要一个参数。OPTARG 变量保存选项参数的值,而 opt 变量保存当前选项字母。
$ ./get.sh -a Golf -b Football
脚本将返回以下结果 −
Option -a stores the value: Golf Option -b htores the value: Football
在命令行参数中使用“循环”
循环用于重复迭代命令行输入并对每个输入执行特定操作。当我们需要分别分析每个参数或对每个参数执行特定操作时,此方法很有用。
下面是一个使用“for”循环遍历命令行选项的脚本示例 −
#!/bin/bash for arg in "$@"; do echo "Processing argument: $arg" # perform some action with the argument here done
在这个脚本中,命令行参数都可以通过 $@ 变量访问,并且每个参数都使用 for 循环进行迭代。在使用参数之前,我们会发出一个消息,表示正在处理它。
让我们运行脚本 −
$ ./loop.sh Hello, Welcome to India.
脚本将返回以下结果 −
Processing argument: Hello, Processing argument: Welcome Processing argument: to Processing argument: India.
在这里,脚本只是为提供的每个输入返回一个消息。然而,我们可以轻松地更改脚本,以便根据我们的特定需要对每个参数执行不同的操作。
"flags" 用于解析命令行参数
使用“flags”是使用命令行参数的另一种方式。
#!/bin/bash flag_a=false flag_b=false while getopts "ab" opt; do case $opt in a) flag_a=true ;; b) flag_b=true ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; esac done if $flag_a; then echo "Option -a has been set" fi if $flag_b; then echo "Option -b has been set" fi
此示例定义了两个标志,“flag_a”和“flag_b”,两者都设置为“false”。
$ ./flags.sh -a -b
Option -a has been set Option -b has been set
当我们不想提供参数值但仍想激活或禁用脚本的特定行为或特性时,标志很有用。此外,它们提高了命令行界面的用户友好性,因为用户不必记住位置参数的正确顺序,并且可以打开或关闭所需的选项。
结论
最后,我们讨论了如何使用位置参数、getopts、shift、flag 和循环在 bash 脚本中使用命令行参数。通过理解这些策略,我们可以开发出健壮灵活的脚本,并实现各种流程自动化。通过使用本文中的知识和示例,我们可以在 bash 脚本编写方面变得精通。