1、位置变量
$0 获取当前执行的Shell脚本的文件名,包括路径。
例1:
[root@test shell]# cat 0.sh
#!/bin/bash
echo $0
[root@test shell]# sh 0.sh
0.sh
例2:
[root@test shell]# dirname /root/shell/0.sh
/root/shell
[root@test shell]# basename /root/shell/0.sh
0.sh
[root@test shell]# cat 0.sh
#!/bin/bash
dirname "$0"
basename "$0"
[root@test shell]# sh /root/shell/0.sh
/root/shell
0.sh
注:dirname表示要得到脚本的路径,而basename表示要得到脚本的名称
$n 获取当前执行的Shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9,用大括号括起来${10}
例1:
[root@test shell]# cat n.sh
#!/bin/bash
echo $1 $2 $3
[root@test shell]# sh n.sh a b c
a b c
例2:
[root@test shell]# cat n.sh
#!/bin/bash
echo $1 $2 $3 $8
[root@test shell]# sh n.sh a b c d e f g h i g k
a b c h
例3:
[root@test shell]# cat n.sh
#!/bin/bash
echo $1 $2 $3 $8 ${12} #注:这里的n的值>9所以要用{ } 括起来,表示12是一个整体#
[root@test shell]# sh n.sh `seq 20`
1 2 3 8 12
例4:
[root@test shell]# cat n.sh #!/bin/bash echo $1 $2 $3 $8 ${12} [root@test shell]# sh n.sh `seq 11` "this is my shell" 1 2 3 8 this is my shell
注:如果其中有个参数中间是由空格隔开的,则需要将整个参数加上“”,表示这个参数为一个整体
从上面的例子可以看出:
n.sh后面的参数值分别赋予相对应的$n的值,以例2为例,如果shell里面有$5命令,则$5的值为e。
$* 获取当前Shell的所有参数,将所有的命令行参数视为单个字符串,相当于“$1$2$3”…注意与$#的区别
$# 获取当前Shell命令行中参数的总个数
例:
[root@test shell]# cat b.sh
#!/bin/bash
echo $#
[root@test shell]# sh b.sh a b c d e f
6
$@ 这个程序的所有参数“$1” “$2” “$3” “. . .”,这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白。