如何在Bash脚本中使用命令行参数


简介

通常,有很多方法可以向编程或脚本语言传递输入,有时需要从命令行而不是从代码中传递输入。像任何其他编程或脚本语言一样,bash脚本也支持命令行参数。

在本文中,我们将尝试探讨命令行参数的语法,然后我们将查看一些命令行参数的示例,并讨论特殊变量。

命令行参数语法

我们已经知道如何在Linux中运行bash脚本。我们可以使用bash或sh命令,然后是bash文件名。

现在,要传递命令行参数,我们可以使用空格分隔的参数。

bash <bash script file name> <command line argument 1> <command line argument 2> … <command line argument n>

这是一个实际的例子

bash add.sh 1 2 3

接下来,我们将尝试一些命令行参数bash脚本。

方法一:通过命令行传递三个整数并求和

示例

#!/bin/bash

echo "First argument is--> $1"
echo "Second argument is--> $2"
echo "Third argument is--> $3"

sum=$((1+$2+$3))
echo "Sum = $sum"

然后像这样运行bash脚本:

$ bash sum.sh 1 2 12

输出

First argument is--> 1
Second argument is--> 2
Third argument is--> 12
Sum = 15

解释

从上面的脚本中,我们得到了以下几点

  • 第一个参数存储在$1中

  • 第二个参数存储在$2中

  • 第三个参数存储在$3中

方法二:bash脚本中使用的特殊变量列表

  • $1…$n − 这是位置参数。我们已经从前面的例子中知道了这一点。

  • $0 − 这表示脚本文件名。例如:sum.sh

  • $# − 这包含传递的参数总数。

  • $@ − 这包含每个参数的值。

  • $$ − 这包含当前shell的PID。

  • $* − 使用此方法,我们可以获得单个参数中的所有参数。

  • $? − 这包含最近命令的退出状态ID。

  • $! − 这包含最近命令的PID。

让我们在一个脚本中使用所有这些并查看输出。

示例

#!/bin/bash

echo "1. 1st argument is --> $1"
echo -e "1. 2nd argument is --> $2"

echo "2. File name is --> $0"

echo "3. Total number of arguments passed --> $#"

echo "4."
i=1;
for arg in "$@"
do
   echo "argument-$i is : $arg";
   i=$((i + 1));
done

echo "5. PID of current shell --> $$"

echo "6."
i=1;
for arg in "$*"
do
   echo "argument-$i is: $arg";
   i=$((i + 1));
done

echo "Executing ls command"
ls

echo "7. Exit status of last command --> $?"
echo "Executing firefox command"
firefox &

echo "8. PID of last command --> $!"
killall firefox

输出

$ bash special-var.sh 1 "2 4" 5

1. 1st argument is --> 1
1. 2nd argument is --> 2 4
2. File name is --> special-var.sh
3. Total number of arguments passed --> 3
4.
argument-1 is : 1
argument-2 is : 2 4
argument-3 is : 5
5. PID of current shell --> 3061
6.
argument-1 is: 1 2 4 5
Executing ls command
special-var.sh  sum.sh
7. Exit status of last command --> 0
Executing firefox command
8. PID of last command --> 3063

方法三:标志的使用

有一种方法可以与标志一起传递命令行参数。标志是在参数之前带有连字符的单个字母。

让我们看看代码,然后就很容易理解这个概念了。

示例

#!/bin/bash
while getopts c:s:d: flag
do
   case "${flag}" in
      d) district=${OPTARG};;
      s) state=${OPTARG};;
      c) country=${OPTARG};;
   esac
done
echo "District: $district";
echo "State: $state";
echo "Country: $country";

输出

$ bash flag.sh -c INDIA -d BANGALORE -s KARNATAKA

District: BANGALORE
State: KARNATAKA
Country: INDIA

从上面的代码中,我们可以看到在命令行中使用标志的优点。现在我们知道,我们不必按顺序传递命令行参数。相反,我们可以使用标志。

结论

在本文中,我们学习了如何在Linux的bash脚本中使用命令行参数。此外,各种特殊变量有助于解析命令行参数。因此,使用命令行参数,我们可以进行更好、更高效的bash脚本编写。

更新于:2023年3月29日

6000+ 次浏览

启动你的职业生涯

通过完成课程获得认证

开始
广告