在执行shell脚本的时候,shell将会对脚本中的行进行解释,然后执行;对于一些特殊处理的句子,我们可以使用引号或者反斜线来避免shell解释执行之。这里我将shell中常用的一些符号组合及使用规则罗列如下:
1、$@ 为传递的参数
2、$# 为传递参数的数量
3、$? 是shell变量,表示"最后一次执行命令"的退出状态,一般0表示成功,非0数值表示没有成功。
切记:$?永远表示shell命令最后一次执行后的退出状态,当函数执行完毕后,如果又执行了其它命令,则$?不再表示函数执行后的状态,而表示其它命令的退出状态.
4、$! 代表pid,进程id
5、$$ 代表ppid,父进程id
6、* 代表全部的意思,比如 echo *会将当前目录下的所有的文件打印出来。
7、双引号 使用双引号,可引用除了字符$、`、\外的任意字符或字符串,双引号也可以使具有特殊含义的词失去其原本的意义。
(1)在脚本文件中输入 date ,执行脚本之后会在终端打印当前的年月日。
(2)在脚本文件中输入DATE=“date”,echo $DATE 执行脚本之后会在终端打印出 date, 而不是当前的年月日,这里“”就使date命令失去了原有的意思,这里仅作为一个字符串赋值给变量DATE。
8、单引号
单引号与双引号类似,不同的是shell会忽略任何引用值,即屏蔽的单引号内的特殊字符的原本含义。
如:echo ‘today is $date’其结果为:today is $date。
注意:单引号和双引号的区别
单引号‘’:取消除单引号以外的任何字符的特殊含义。
如:echo ‘today is $date’其结果为:today is $date,此时$只作为一个普通字符使用了。
双引号“”:取消除双引号、$号以及_号以外的所有字符的特殊含义
单引号是强引用,引号里的值是什么,变量的值就是什么;
双引号是弱引用,引号里的值若再包含变量,那在赋值的时候,所有这些变量就被立即替换了。
echo "usrname is:$LOGNAME" 结果:usrname is:yeexun
echo "usrname is:'$LOGNAME'" 结果:usrname is:'yeexun'
echo "usrname is:"$LOGNAME"" 结果:usrname is:yeexun
echo 'usrname is:$LOGNAME' 结果:usrname is:$LOGNAME
echo 'usrname is:"$LOGNAME"' 结果:usrname is:"$LOGNAME"
echo 'usrname is:'$LOGNAME'' 结果:usrname is:yeexun
9、反引号
在脚本文件下,按下键盘上Tab键上面的那个键,输入的就是反引号,反引号(`)用于设置系统命令输出到变量,shell认为反引号中的内容是一个系统命令。也可以使用$()来引用一个命令,但是反引号中不能在引用反引号,而$()可以在引用反引号。
在脚本文件中输入 echo `date`,执行脚本之后会在终端打印当前的年月日Mon Dec 24 16:06:55 CST 2012,这和在终端直接输入date命令是一样的:
date
Mon Dec 24 16:07:12 CST 2012
若输入一个非系统命令,则shell不认识此命令,将会报错:
echo `DATE`
ksh: DATE: not found
10、反斜杠
反斜杠的作用是将一些特殊字符按原样输出,这些特殊字符有:$、*、`、+、^、&、|、"、?。
例如:echo * 将当前目录下的文件名和目录名都列出来。
echo \* * 而使用反斜杠转义之后,就输出了星号。