本文讨论的一些shell特殊参数有:$*,$@,$#,$$,$!示例1:使用$*和$@扩展位置参数$*和$@参数用于此示例脚本:[root@localhostscripts]#vimexpan.sh#!/bin/bashexportIFS='-'cnt=1#Printingthedataavailablein$*echo"Valuesof\"\$*\":"forargin"$*"doecho"Arg#$cnt=$arg"let"cnt+=1"donecnt=1#Printingthedataavailablein$@echo"Valuesof\"\$@\":"forargin"$@"doecho"Arg#$cnt=$arg"let"cnt+=1"done下面是运行结果:[root@localhostscripts]#./expan.sh"Helloworld"234Valuesof"$*":Arg#1=Helloworld-2-3-4Valuesof"$@":Arg#1=HelloworldArg#22=2Arg#33=3Arg#44=4exportIFS='-'表示用“-”表示内部字段分隔符。在打印参数$*的每一个值时,它只给出一个值,就是用IFS分隔的整个位置参数。而$@将每个参数作为单独的值提供。例2:使用$#统计位置参数的个数$#是一个特殊的参数,可以增加脚本中位置参数的个数:[root@localhostscripts]#vimcount.sh#!/bin/bashif[$#-lt2]thenecho"用法:$0arg1arg2"exitfiecho-e"\$1=$1"echo-e"\$2=$2"letadd=$1+$2letsub=$1-$2letmul=$1*$2letdiv=$1/$2echo-e"Addition=$add\nSubtraction=$sub\nMultiplication=$mul\nDivision=$div\n"运行结果如下:[root@localhostscripts]#./count.shUsage:./count.sharg1arg2[root@localhostscripts]#./count.sh231415241$1=2314$2=15241Addition=17555Subtraction=-12927Multiplication=35267674Division=0如果脚本中的[$#-lt2]表示持仓参数个数小于2时会提示“用法:./count.sharg1arg2”。示例3:与流程相关的参数$$和$!参数$$将给出shell脚本的进程ID。$!提供最近执行的后台进程的ID。以下示例打印当前脚本的进程ID和最后执行的后台进程的ID:[root@localhostscripts]#vimproc.sh#!/bin/bashecho-e"ProcessID=$$"sleep1000&echo-e"BackgroundProcessID=$!"下面是执行结果:[root@localhostscripts]#./proc.shProcessID=14625BackgroundProcessID=14626[root@localhostscripts]#psPIDTTYTIMECMD3665pts/000:00:00bash14626pts/000:00:00sleep14627pts/000:00:00ps
