学习第三天 shell特殊变量

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” “.  .  .”,这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白。

点赞