本文共 1390 字,大约阅读时间需要 4 分钟。
位置变量。
$0 获取当前执行的shell脚本的文件名。如图:
[root@localhost ~]# vim 0.sh
[root@localhost ~]# cat 0.sh
echo $0
[root@localhost ~]# sh 0.sh
0.sh
[root@localhost ~]#
如果我把它的完全路径输入的话就会这样,如图:
[root@localhost ~]# sh /root/0.sh
/root/0.sh
$1一直到$10是代表对应的第几个变量,如$1是对应的第一个变量的值,如果是$10的话,要把10用{}括号括号起来,如${10}
如图:
[root@localhost ~]# sh 0.sh zhouyu
zhouyu
顺便说一下,seq是发送从哪个值到哪个值,如命令
seq -s " " 1 10
是说发送1到10用空格分隔出来,如图:
[root@localhost ~]# seq -s " $" 1 10
1 $2 $3 $4 $5 $6 $7 $8 $9 $10
$#是指命令行参数的总个数。如果给你命令行的参数有10个那么$#就是10
dirname $0是把脚本的目录取出来
basename $0是把名称取出来。
如图:
[root@localhost ~]# cat 0.sh
dirname $0
basename $0
[root@localhost ~]# sh /root/0.sh
/root
0.sh
[root@localhost ~]#
可以去看看/etc/init.d/nfs文件对于这些参数的用法。
$@和$*的区别
$*是把所有的变量看成是一个变量,在加了""的情况下就是这样。如果不加""的话就会把每一 个变量都拆分出来,这样和$@是没有区别的
$@是把所有的变量都拆分出来,在加了""的情况下就是这样的。两者的区别可以看看下面的例 子
[root@localhost zhouyu]# set "zhou yu" 1 3
[root@localhost zhouyu]# for i;do echo $i;done
zhou yu
1
3
[root@localhost zhouyu]# for i in $*;do echo $i;done
zhou
yu
1
3
[root@localhost zhouyu]# for i in $@;do echo $i;done
zhou
yu
1
3
[root@localhost zhouyu]# for i in "$*";do echo $i;done
zhou yu 1 3
[root@localhost zhouyu]# for i in "$@";do echo $i;done
zhou yu
1
3
有时候我们要删除目录的时候,就是用变量删除的,可是如果没有变量或者我们定义的变量突然失效的话,那有可能会从/开始删除,这样的话就会对系统造成影响。所以我们可以用以下命令来确保我们的变量存在
${zhouyu:=/tmp}
上面那个的意思就是说如果$zhouyu变量不存在,就会赋予它一个值,这个值为/tmp
转载地址:http://gfmol.baihongyu.com/