如何在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脚本编写。
广告