如何在 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 脚本编写方面变得精通。

更新于: 14-Jul-2023

387 浏览次数

开启你的职业

完成课程,获得认证

开始
广告