shell脚本中$符号的命令使用汇总
今天是远程办公的第4天,渐渐的找到了一点在家办公的节奏了,改了几个shell脚本,在改动过程中,发现还有一些知识点需要巩固,这里写出来,加深下印象。
关于$符号,大家肯定都不陌生,在shell脚本中,$的作用还是比较大多的,这里将所有的$组合都列出来,大家可以看下效果。
$组成的命令大概有下面几个:
$0,$1...$?,$!,$$,$*,$#,$@
下面分别看看这些意思是什么:
1.$0,$1
$0和$1比较好理解,他们的意思,分别是脚本名称和脚本的第一个参数,我们举个例子来看:
jwfyyzdembp:tmpjwfyyz$cattest.sh echo'$0的含义是':$0 echo'$1的含义是':$1 jwfyyzdembp:tmpjwfyyz$./test.shyeyz $0的含义是:./test.sh $1的含义是:yeyz jwfyyzdembp:tmpjwfyyz$shtest.shyeyz $0的含义是:test.sh $1的含义是:yeyz
需要注意一点,当使用./test.sh的方法来运行脚本的时候,$0的值是./test.sh,而不是test.sh
2.$?
$?指的是最后运行的命令的执行返回码,执行成功,则返回0,否则返回1,举例如下:
jwfyyzdembp:tmpjwfyyz$cattest.sh echo'$0的含义是':$0 echo'$1的含义是':$1 ls-la.txt echo'$?的结果是'$? ls-ltest.sh echo'$?的结果是'$? jwfyyzdembp:tmpjwfyyz$shtest.shyeyz $0的含义是:test.sh $1的含义是:yeyz ls:a.txt:Nosuchfileordirectory $?的结果是1 -rwxr-xr-x1jwfyyzwheel1242720:32test.sh $?的结果是0
可以看到,第一次运行ls-la.txt的时候,由于我们的目录中没有a.txt这个文件,所以返回是1,第二次由于test.sh文件是存在的,所以返回的结果是0
3.$$
$$指的是脚本运行的当前进行id号,举例如下:
jwfyyzdembp:tmpjwfyyz$cattest.sh pwd echo$$ sleep10 jwfyyzdembp:tmpjwfyyz$shtest.sh& [1]60658 jwfyyzdembp:tmpjwfyyz$ps-ef|greptest 501606586052908:36下午ttys0000:00.01shtest.sh 501606616052908:36下午ttys0000:00.00greptest
我们在test.sh脚本后面设置了sleep10的命令,脚本运行完会睡眠10s,脚本中打印出来了值60658,此时我们查看当前脚本的进程号,发现子进程的进程id是60658
4.$*和$@
这两个放在一起,主要是因为他们都代表引用的所有参数,单独打印出来结果,都是一样的,但是循环打印他们的内容,则会看出区别,举例如下:
jwfyyzdembp:tmpjwfyyz$cattest.sh echo'$*的结果是':$* echo'$@的结果是':$@ echo"--\$*演示---" foriin"$*";do echo$i done echo"--\$@演示---" foriin"$@";do echo$i done jwfyyzdembp:tmpjwfyyz$shtest.shyeyz123 $*的结果是:yeyz123 $@的结果是:yeyz123 --$*演示--- yeyz123 --$@演示--- yeyz 1 2 3
可以看到,循环打印的时候,$@
5.$#
$#容易理解,它的意思是参数的个数。举例:
jwfyyzdembp:tmpjwfyyz$cattest.sh echo'$*的结果是':$* echo'$@的结果是':$@ echo'$#的结果是':$# jwfyyzdembp:tmpjwfyyz$shtest.shyeyz123 $*的结果是:yeyz123 $@的结果是:yeyz123 $#的结果是:4
6.$!
该命令是显示shell脚本中上一个后台执行命令的进程id号,如下:
jwfyyzdembp:tmpjwfyyz$cattest.sh echo'$*的结果是':$* echo'$@的结果是':$@ echo'$#的结果是':$# sleep10& echo'$!的结果是':$! sleep10 jwfyyzdembp:tmpjwfyyz$shtest.shyeyz123& [1]61237 $*的结果是:yeyz123 $@的结果是:yeyz123 $#的结果是:4 $!的结果是:61238 jwfyyzdembp:tmpjwfyyz$ps-ef|grepsleep 501612386123709:12下午ttys0000:00.00sleep10 501612396123709:12下午ttys0000:00.00sleep10 501612416052909:12下午ttys0000:00.00grepsleep
在test.sh中,我们使用了sleep10这样的命令在后台执行,然后我们可以看到,$!返回的值是61238,当我们ps-ef命令去查询进程信息的时候,可以看到,61238这个进程对应的命令就是sleep10,注意和$$区分开来,$$反应的是当前脚本执行的进程号,$!反应的是脚本中某个命令的进程号。
以上就是shell脚本中$符号的使用示例的详细内容,更多关于shell$的资料请关注毛票票其它相关文章!