位置变量、参数用法详解,位置参数变量作用,$,#,*,$1,$2等详解和例子


文章目录


前言

位置变量:在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数

位置参数变量作用

  • 1 , . . . 对 应 第 1 个 、 第 2 个 等 参 数 , 参 数 个 数 超 过 10 个 时 , 就 要 用 大 括 号 把 这 个 数 字 括 起 来 , 例 如 , 1, ... 对应第1个、第2个等参数,参数个数超过 10 个时,就要用大括号把这个数字括起来,例如,1,...对应第1个、第2个等参数,参数个数超过10个时,就要用大括号把这个数字括起来,例如,{10} 代表第 10 个参数,${14} 则代表第 14 个参数
  • $0 代表命令行本身,包括路径
  • $* 传递给脚本的所有参数,全部参数合为一个字符串
  • $@ 传递给脚本的所有参数,每个参数为独立字符串
  • $# 传递给脚本的参数的个数
[root@zaishu pic]# ls 001.jpg  010.jpg  011.jpg  100.jpg  101.jpg  111.jpg

对于这条命令,$0 的值就是 ls ,$1 的值就是 001.jpg,$2 是010.jpg,$3 是011.jpg,一次类推。

例子

位置参数变量用于向命令或程序脚本中传递信息,例如如下例子,写一个计算器:

[root@zaishu sh]# cat calc.sh 
#!/bin/bash
# ------------------------------------------
# Filename: calc.sh
# Version: 1.1
# Date: 2021/01/01
# Author: shuge
# Email: 123@mail.com
# Website: www.zaishu.cn
# Description: This is the calc script
# Copyright: shuge
# License: GPL
# ------------------------------------------
n1=$1
n2=$2
sum=$(($n1+$n2))
echo $sum

在 Shell 中,数值运算可参照后面内容,演示效果:

[root@zaishu sh]# ./calc.sh 1 2  //把第一个参数和第二个参数相加
3

$* $@ $# 示例

还有几个位置参数变量是干什么的呢?我们再写一个脚本来说明一下,如下:

#!/bin/bash
# ------------------------------------------
# Filename: param.sh
# Version: 1.1
# Date: 2021/01/01
# Author: shuge
# Email: 123@mail.com
# Website: www.zaishu.cn
# Description: This is the param script
# Copyright: shuge
# License: GPL
# ------------------------------------------
echo "total of $# parameters" //$#代表参数个数,不包含命令
echo "The parameters is: $*" //代表所有参数,不包含命令
echo "The parameters is: $@" //代表所有参数,不包含命令
[root@zaishu sh]# ./param.sh 11 22 aa
total of 3 parameters
The parameters is: 11 22 aa
The parameters is: 11 22 aa

$*和$@的区别

$* 会把接收到的所有参数当成一个整体对待,$@ 会区别对待接收到的所有参数。

[root@zaishu sh]# cat param2.sh 
#!/bin/bash
# ------------------------------------------
# Filename: param2.sh
# Version: 1.1
# Date: 2021/01/01
# Author: shuge
# Email: 123@mail.com
# Website: www.zaishu.cn
# Description: This is the param2 script
# Copyright: shuge
# License: GPL
# ------------------------------------------
echo '$* print'
for i in "$*"

do
echo "The parameters is: $i"
done
echo '$@ print'
for y in "$@"
do
echo "The parameter$x is: $y"
done
[root@zaishu sh]# ./param2.sh 11 22 33 44
$* print //将所有参数作为一个整体进行打印,只循环一次
The parameters is: 11 22 33 44
$@ print //将所有参数单独处理,循环了4次
The parameter is: 11
The parameter is: 22
The parameter is: 33
The parameter is: 44

总结

Shell位置变量和参数用法详解,位置参数变量作用,$,#,*,$1,$2等详解和例子