Shell 特殊变量
1.特殊变量名和含义
变量名 含义
$0 脚本名字
$1 位置参数 #1
$2 - $9 位置参数 #2 - #9
${10} 位置参数 #10
$# 位置参数的个数 sh test.sh XX YY , $#就是2 是表示参数的个数
$? 上个命令执行后,返回的执行命令状态结果, 或者是函数的返回值
"$*" 所有的位置参数(作为单个字符串) *
"[email protected]" 所有的位置参数(每个都作为独立的字符串)
$$ 当前shell进程ID。
${#*} 传递到脚本中的命令行参数的个数
${#@} 传递到脚本中的命令行参数的个数
$_ 之前命令的最后一个参数
$! 运行在后台的最后一个作业的进程ID(PID)
2.【实例】
[[email protected] ~]# more third.sh
#!/bin/bash
#parm
echo "this is shellname: $0"
echo "this is parm1 : $1"
echo "this is parm2 : $2"
echo "show parm number : $#"
echo "show parm list : $*"
echo "show parm list : [email protected]"
echo "show parm number : ${#*}"
echo "show parm number : ${#@}"
echo "show process id: $$"
运行结果:
[[email protected] ~]# sh third.sh no1var no2var
this is shellname: third.sh
this is parm1 : no1var
this is parm2 : no2var
show parm number : 2
show parm list : no1var no2var
show parm list : no1var no2var
show parm number : 2
show parm number : 2
show process id: 23650
[[email protected] ~]# echo $_
no2var
3.$* 和 [email protected] 的区别
[email protected] $* 只在被双引号包起来的时候才会有差异
这部分是在网上看到的,原创已经不知道是哪位了。(这个例子很能说明)
精确来讲,两者只有在 "" (双引号) 中才有差异,否则,都表示"全部参数"( $0 除外)。
举例来说好了:
sh my.sh p1 "p2 p3" p4 的话,
不管是 [email protected] 还是 $* ,都可得到 p1 p2 p3 p4 就是了。
但是,如果置于 "" (双引号)中的话:
"[email protected]" 则可得到 "p1" "p2 p3" "p4" 这三个不同的词段(word);
"$*" 则可得到 "p1 p2 p3 p4" 这一整串单一的词段。
我们可修改一下前面的 my.sh ,使之内容如下:
代码:
#!/bin/bash
my_fun() {
echo "$#"
}
echo ‘the number of parameter in "[email protected]" is ‘$(my_fun "[email protected]")
echo ‘the number of parameter in "$*" is ‘$(my_fun "$*")
然后再执行 sh my.sh p1 "p2 p3" p4 就知道 [email protected] 与 $* 差在哪了 ... ^_^
the number of parameter in "[email protected]" is 3
the number of parameter in "$*" is 1
【[email protected] $* 的实例 说明】
[[email protected] ~]# cat a.txt
aaaaaaa
[[email protected] ~]# cat b.txt
bbbbbbb
[[email protected] ~]# cat c.sh
#!/bin/sh
cat $1
[[email protected] ~]# cat *.txt
aaaaaaa
bbbbbbb
[[email protected] ~]# sh c.sh *.txt
aaaaaaa
在c.sh中写了cat $1 为什么只显示一个文件中的内容, 但如果在命令行下cat *.txt就会显示2个文件信息
将c.sh 改成 cat [email protected] 就正常了
[[email protected] ~]# vim c.sh
#!/bin/sh
cat [email protected] #(改成$* 也是可以的)
[[email protected] ~]# sh c.sh *.txt
aaaaaaa
bbbbbbb
4.$?
[[email protected] ~]# echo `hostname`
10-222
[[email protected] ~]# echo $?
0
[[email protected] ~]# grep ‘cpu cores‘ /proc/cpuinfo
cpu cores : 1
[[email protected] ~]# echo $?
0
以下几个部分在后续内容介绍
$? 在函数的返回值会在后续的章节说明
以上是个人点点总结和理解,水平不高,文笔水平很烂,请各位大大见谅。
可以一起交流学习。
我的QQ:610851588
可以加入我建的群(现在群人很少,希望慢慢多起来)
Linux 群:183932302
Python ,shell 交流群:469094734