shell脚本中$符号的命令用法介绍-创新互联
这篇文章主要讲解了“shell脚本中$符号的命令用法介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“shell脚本中$符号的命令用法介绍”吧!
成都创新互联长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为东宁企业提供专业的成都网站制作、成都做网站、外贸营销网站建设,东宁网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。关于$符号,大家肯定都不陌生,在shell脚本中,$的作用还是比较大多的,这里将所有的$组合都列出来,大家可以看下效果。
$组成的命令大概有下面几个:
$0,$1...$?,$!,$$,$*,$#,$@
下面分别看看这些意思是什么:
1.$0,$1
$0和$1比较好理解,他们的意思,分别是脚本名称和脚本的第一个参数,我们举个例子来看:
jwfyyzdembp:tmp jwfyyz$ cat test.sh echo '$0的含义是':$0 echo '$1的含义是':$1 jwfyyzdembp:tmp jwfyyz$ ./test.sh yeyz $0的含义是:./test.sh $1的含义是:yeyz jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz $0的含义是:test.sh $1的含义是:yeyz
需要注意一点,当使用./test.sh的方法来运行脚本的时候,$0的值是./test.sh,而不是test.sh
2.$?
$?指的是最后运行的命令的执行返回码,执行成功,则返回0,否则返回1,举例如下:
jwfyyzdembp:tmp jwfyyz$ cat test.sh echo '$0的含义是':$0 echo '$1的含义是':$1 ls -l a.txt echo '$?的结果是'$? ls -l test.sh echo '$?的结果是'$? jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz $0的含义是:test.sh $1的含义是:yeyz ls: a.txt: No such file or directory $?的结果是1 -rwxr-xr-x 1 jwfyyz wheel 124 2 7 20:32 test.sh $?的结果是0
可以看到,第一次运行ls -l a.txt的时候,由于我们的目录中没有a.txt这个文件,所以返回是1,第二次由于test.sh文件是存在的,所以返回的结果是0
3.$$
$$指的是脚本运行的当前进行id号,举例如下:
jwfyyzdembp:tmp jwfyyz$ cat test.sh pwd echo $$ sleep 10 jwfyyzdembp:tmp jwfyyz$ sh test.sh & [1] 60658 jwfyyzdembp:tmp jwfyyz$ ps -ef|grep test 501 60658 60529 0 8:36下午 ttys000 0:00.01 sh test.sh 501 60661 60529 0 8:36下午 ttys000 0:00.00 grep test
我们在test.sh脚本后面设置了sleep 10的命令,脚本运行完会睡眠10s,脚本中打印出来了值60658,此时我们查看当前脚本的进程号,发现子进程的进程id是60658
4.$*和$@
这两个放在一起,主要是因为他们都代表引用的所有参数,单独打印出来结果,都是一样的,但是循环打印他们的内容,则会看出区别,举例如下:
jwfyyzdembp:tmp jwfyyz$ cat test.sh echo '$*的结果是':$* echo '$@的结果是':$@ echo "-- \$* 演示 ---" for i in "$*"; do echo $i done echo "-- \$@ 演示 ---" for i in "$@"; do echo $i done jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3 $*的结果是:yeyz 1 2 3 $@的结果是:yeyz 1 2 3 -- $* 演示 --- yeyz 1 2 3 -- $@ 演示 --- yeyz 1 2 3
可以看到,循环打印的时候,$@
5.$#
$#容易理解,它的意思是参数的个数。举例:
jwfyyzdembp:tmp jwfyyz$ cat test.sh echo '$*的结果是':$* echo '$@的结果是':$@ echo '$#的结果是':$# jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3 $*的结果是:yeyz 1 2 3 $@的结果是:yeyz 1 2 3 $#的结果是:4
6.$!
该命令是显示shell脚本中上一个后台执行命令的进程id号,如下:
jwfyyzdembp:tmp jwfyyz$ cat test.sh echo '$*的结果是':$* echo '$@的结果是':$@ echo '$#的结果是':$# sleep 10 & echo '$!的结果是':$! sleep 10 jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3 & [1] 61237 $*的结果是:yeyz 1 2 3 $@的结果是:yeyz 1 2 3 $#的结果是:4 $!的结果是:61238 jwfyyzdembp:tmp jwfyyz$ ps -ef|grep sleep 501 61238 61237 0 9:12下午 ttys000 0:00.00 sleep 10 501 61239 61237 0 9:12下午 ttys000 0:00.00 sleep 10 501 61241 60529 0 9:12下午 ttys000 0:00.00 grep sleep
在test.sh中,我们使用了sleep 10这样的命令在后台执行,然后我们可以看到,$!返回的值是61238,当我们ps -ef命令去查询进程信息的时候,可以看到,61238这个进程对应的命令就是sleep 10,注意和$$区分开来,$$反应的是当前脚本执行的进程号,$!反应的是脚本中某个命令的进程号。
感谢各位的阅读,以上就是“shell脚本中$符号的命令用法介绍”的内容了,经过本文的学习后,相信大家对shell脚本中$符号的命令用法介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联网站建设公司,,小编将为大家推送更多相关知识点的文章,欢迎关注!
文章题目:shell脚本中$符号的命令用法介绍-创新互联
URL地址:http://myzitong.com/article/cedhgo.html