10.4.3 Bash变量位置参数变量
$n
n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}.
向脚本当中传递我们需要的数值。
[.@.]vi canshu1.sh
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
[.@.]chmod 755 canshu1.sh
[.@.]./canshu1.sh 11 22 33
./canshu1.sh
11
22
33
[.@.]vim canshu2.sh
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
echo "sum is : $sum"
[.@.]chmod 755 canshu2.sh
[.@.]./canshu2.sh 11 22
sum is : 33
$*
这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$#
这个变量代表命令行中所有参数的个数
[.@.]vim canshu3.sh
#!/bin/bash
echo "A total of $# parameters"
echo "The parameters is: $*"
echo "The parameters is: $@"
[.@.]chmod 755 canshu3.sh
[.@.]./canshu3.sh 11 22 33 44 55 66
6
11 22 33 44 55 66
11 22 33 44 55 66
$*与 $@的区别
#!/bin/bash
for i in "$*"
#$* 中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo "The parameters is: $i"
done
x=1
for y in "$@"
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
echo "The parameter$x is: $y"
x=$(( $x + 1))
done
位置参数变量最大的目的,就是为了向程序当中传递需要的值,但是位置参数变量有一个问题。除非脚本是自己写的,否则根本不会清楚,我要在脚本后面跟几个参数。在实际工作中,建议用其他的方式来接收用户的输入,而不是采用位置参数变量。它的好处是可以在命令执行的同时解释脚本,而不是命令执行完了,单独敲入参数传递。