shell中的特殊字符
1.通配符
用于模式匹配,常用的有三种:
1)*:匹配任意字符的0次或多次出现,但应注意,文件名前面的圆点(.)和路径名中的斜线(/)必须显示匹配。例如,模式“ *file”不能匹配.profile,而“.*file”才能匹配。
2)?:它匹配任意一个字符。
3)[]:其中有一个字符组。其作用是匹配该字符组所限定的任何一个字符。例如,f[abcd]能匹配fa,fb,fc,fd。方括号中的字符组可以由直接给出的字符组成,如上面所示;也可以由表示限定范围的起始字符、终止字符及中间一个连字符-组成。例如f[a-d]和f[abcd]的作用相同。应该注意,连字符仅在一对方括号内表示字符范围。
4)!:如果它紧跟在一对方括号的左方括号之后,则表示不在一对方括号中所列出的字符。
2.引号
在shell中引号分为三种:单引号、双引号、倒引号。
1)双引号
由双引号括起来的字符,除$、倒引号和反斜线仍保留其特殊功能外,其余字符通常作为普通字符对待。
2)单引号
由单引号括起来的字符都作为普通字符出现。特殊字符也失去原来的意义。
3)倒引号
倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分。
利用倒引号的这种功能可以进行命令置换,即把倒引号括起来的命令的执行结果赋给指定变量。
还可以嵌套使用。但应注意,嵌套使用时内层的倒引号必须用反斜线将其转义。例如:
Nuser=`echo The number of users is \`who | wc -l\``
echo $Nuser
如果内层不用转义,而直接以原型出现在该字符串中。
3.反斜线
是转义字符,能把特殊字符变为普通字符。如果想在字符串中使用反斜线本身,则必须采用\的形式。
应注意,在单引号括起来的字符串中,反斜线也成为了普通字符。
另外,反斜线还可以作为续行符使用。如果把它放在一行的行首,那么这一行就和前面的一行被视为同一行。可用于表示长的输入行。
4.输入输出重定向符
执行一个shell命令时通常会自动打开三个标准文件,这就是:标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准出错输出文件(stderr),这两个文件都对应终端的屏幕。由父进程创建子进程时,子进程就继承了父进程打开的这三个文件,因而可以利用键盘输入数据,从屏幕上显示计算结果及各种信息。在shell中,这三个文件都可以通过重新定向符进行重新定向。
1)输入重定向符"<"
输入重定向的一般形式是:命令 < 文件名
2)输出重定向符">"
把命令的标准输出重新定向到指定文件。
应注意,如果不同命令的输出都定向到同一个文件,那么只有最后命令的输出保留在该文件中,原有内容被新内容冲掉了。如果定向的目标文件是一个普通文件,并且它原来不存在,那么就新建立一个新文件。
输出重定向一般形式是:命令 > 文件名
3)输出附加定向符 ">>"
把命令的输出附加到指定文件的后面。,而原有文件内容不会被覆盖。
一般形式:命令 >> 文件名
4)即时文件定向符 "<<"
即时文件是由重新定向符和标记符以及其中的若干输入行组成。它允许把shell程序的输入行重新定向到一个命令中。即时文件的形式是:
命令[参数] << 标记符
输入行
...
标记符
标记符要成对出现。如果没有作为结束符的标记符,但遇到文件末尾,同样也可以结束即时文件。
5)与文件描述字有关的重定向
在UNIX系统中,每一个打开的文件都有一个系统赋予的文件描述字,这是一个小整数。文件打开后,用户可以直接用这些描述字去引用对应的文件。如前所述,系统为每个进程自动打开的三个标准文件(标准输入,标准输出,标准错误输出)赋予的文件描述符为0,1,2
标准错误输出也可重定向到一个文件中,其一般形式为:
命令 2> 文件名
命令 2>> 文件名
在使用重定向符时应注意在文件描述字2和定向符之间不能有空格或制表符
shell重定向时从左到右进行的。
与重新定向有关的文件描述字可以是0~9,共10个数字。
5.注释、管道线和后台命令
1)注释
以#开头的正文行表示注释。
2)管道线
在UNIX系统中管道线是有竖杠隔开的若干个命令组成的序列
在管道线中,每个命令运行时都有一个独立的进程。前一个命令的输出正是下一个命令的输入。而管道线中有一类命令也称作“过滤器”,过滤器首先读取输入,然后将输入以某种简单方式进行变换,再将处理结果输出,例如grep,tail,sort,wc等命令就成为过滤器。
一个管道线中可以包括多条命令。
3)后台命令
在一条命令的最后键入&,shell就在后台启动该程序,并且马上显示主提示符,提醒你键入新的命令。
通常规定,后台进程的调度优先级都低于前台进程的优先级。
6.命令执行操作符
1)顺序执行
多条命令可以在多行中键入,每条命令或管道线单独占一行,也可将这些命令在一行中输入,但各条命令之间应以分号;隔开
2)逻辑与
“&&”可把两个命令联系到一起,其一般形式
命令1&&命令2
功能是:先执行命令1,成功后才可执行命令2。
3)逻辑或
“||”可把两个命令联系起来,一般形式:命令1||命令2
功能是:先运行命令1,如果运行不成功,则运行命令2;否则,若命令1运行成功,则不运行命令2。
操作符&&和||实际上可视为管道线上的条件运算符,他们的优先级相同,都低于&和|的优先级。
7.成组命令
在shell中有两种方式可以将若干个命令组合在一起,使其在逻辑上被视为一条命令,他们使用或括号{}将命令括起来和用圆括号()括起来。
以花括号括起来的全部命令可视为语法上的一条命令,出现在管道符的一边,成组命令的执行顺序是根据命令出现的先后次序,由左至右执行。在管道线中,成组命令把各命令的执行结果汇集在一起,形成一个输出流,这个流作为该管道线中下一个命令的输入。
使用花括号时在格式上应注意,左括号后面应该有一个空格;右括号之前应该有一个分号。花括号也可以包含若干单独占一行的命令。
成组命令也可以用圆括号括起来,执行过程与用花括号形式相同。但二者又有重要的区别:用花括号括起来的成组命令只是在本shell内执行命令表,不产生新的进程。而用圆括号括起来的成组命令时在新的shell内执行,要建立新的子进程。因此,在圆括号内的命令不会改变父shell的变量值及工作目录等。
在用圆括号括起成组命令时,左括号后不必有空格,右括号之前也不需加上分号。
1.通配符
用于模式匹配,常用的有三种:
1)*:匹配任意字符的0次或多次出现,但应注意,文件名前面的圆点(.)和路径名中的斜线(/)必须显示匹配。例如,模式“ *file”不能匹配.profile,而“.*file”才能匹配。
2)?:它匹配任意一个字符。
3)[]:其中有一个字符组。其作用是匹配该字符组所限定的任何一个字符。例如,f[abcd]能匹配fa,fb,fc,fd。方括号中的字符组可以由直接给出的字符组成,如上面所示;也可以由表示限定范围的起始字符、终止字符及中间一个连字符-组成。例如f[a-d]和f[abcd]的作用相同。应该注意,连字符仅在一对方括号内表示字符范围。
4)!:如果它紧跟在一对方括号的左方括号之后,则表示不在一对方括号中所列出的字符。
2.引号
在shell中引号分为三种:单引号、双引号、倒引号。
1)双引号
由双引号括起来的字符,除$、倒引号和反斜线仍保留其特殊功能外,其余字符通常作为普通字符对待。
2)单引号
由单引号括起来的字符都作为普通字符出现。特殊字符也失去原来的意义。
3)倒引号
倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分。
利用倒引号的这种功能可以进行命令置换,即把倒引号括起来的命令的执行结果赋给指定变量。
还可以嵌套使用。但应注意,嵌套使用时内层的倒引号必须用反斜线将其转义。例如:
Nuser=`echo The number of users is \`who | wc -l\``
echo $Nuser
如果内层不用转义,而直接以原型出现在该字符串中。
3.反斜线
是转义字符,能把特殊字符变为普通字符。如果想在字符串中使用反斜线本身,则必须采用\的形式。
应注意,在单引号括起来的字符串中,反斜线也成为了普通字符。
另外,反斜线还可以作为续行符使用。如果把它放在一行的行首,那么这一行就和前面的一行被视为同一行。可用于表示长的输入行。
4.输入输出重定向符
执行一个shell命令时通常会自动打开三个标准文件,这就是:标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准出错输出文件(stderr),这两个文件都对应终端的屏幕。由父进程创建子进程时,子进程就继承了父进程打开的这三个文件,因而可以利用键盘输入数据,从屏幕上显示计算结果及各种信息。在shell中,这三个文件都可以通过重新定向符进行重新定向。
1)输入重定向符"<"
输入重定向的一般形式是:命令 < 文件名
2)输出重定向符">"
把命令的标准输出重新定向到指定文件。
应注意,如果不同命令的输出都定向到同一个文件,那么只有最后命令的输出保留在该文件中,原有内容被新内容冲掉了。如果定向的目标文件是一个普通文件,并且它原来不存在,那么就新建立一个新文件。
输出重定向一般形式是:命令 > 文件名
3)输出附加定向符 ">>"
把命令的输出附加到指定文件的后面。,而原有文件内容不会被覆盖。
一般形式:命令 >> 文件名
4)即时文件定向符 "<<"
即时文件是由重新定向符和标记符以及其中的若干输入行组成。它允许把shell程序的输入行重新定向到一个命令中。即时文件的形式是:
命令[参数] << 标记符
输入行
...
标记符
标记符要成对出现。如果没有作为结束符的标记符,但遇到文件末尾,同样也可以结束即时文件。
5)与文件描述字有关的重定向
在UNIX系统中,每一个打开的文件都有一个系统赋予的文件描述字,这是一个小整数。文件打开后,用户可以直接用这些描述字去引用对应的文件。如前所述,系统为每个进程自动打开的三个标准文件(标准输入,标准输出,标准错误输出)赋予的文件描述符为0,1,2
标准错误输出也可重定向到一个文件中,其一般形式为:
命令 2> 文件名
命令 2>> 文件名
在使用重定向符时应注意在文件描述字2和定向符之间不能有空格或制表符
shell重定向时从左到右进行的。
与重新定向有关的文件描述字可以是0~9,共10个数字。
5.注释、管道线和后台命令
1)注释
以#开头的正文行表示注释。
2)管道线
在UNIX系统中管道线是有竖杠隔开的若干个命令组成的序列
在管道线中,每个命令运行时都有一个独立的进程。前一个命令的输出正是下一个命令的输入。而管道线中有一类命令也称作“过滤器”,过滤器首先读取输入,然后将输入以某种简单方式进行变换,再将处理结果输出,例如grep,tail,sort,wc等命令就成为过滤器。
一个管道线中可以包括多条命令。
3)后台命令
在一条命令的最后键入&,shell就在后台启动该程序,并且马上显示主提示符,提醒你键入新的命令。
通常规定,后台进程的调度优先级都低于前台进程的优先级。
6.命令执行操作符
1)顺序执行
多条命令可以在多行中键入,每条命令或管道线单独占一行,也可将这些命令在一行中输入,但各条命令之间应以分号;隔开
2)逻辑与
“&&”可把两个命令联系到一起,其一般形式
命令1&&命令2
功能是:先执行命令1,成功后才可执行命令2。
3)逻辑或
“||”可把两个命令联系起来,一般形式:命令1||命令2
功能是:先运行命令1,如果运行不成功,则运行命令2;否则,若命令1运行成功,则不运行命令2。
操作符&&和||实际上可视为管道线上的条件运算符,他们的优先级相同,都低于&和|的优先级。
7.成组命令
在shell中有两种方式可以将若干个命令组合在一起,使其在逻辑上被视为一条命令,他们使用或括号{}将命令括起来和用圆括号()括起来。
以花括号括起来的全部命令可视为语法上的一条命令,出现在管道符的一边,成组命令的执行顺序是根据命令出现的先后次序,由左至右执行。在管道线中,成组命令把各命令的执行结果汇集在一起,形成一个输出流,这个流作为该管道线中下一个命令的输入。
使用花括号时在格式上应注意,左括号后面应该有一个空格;右括号之前应该有一个分号。花括号也可以包含若干单独占一行的命令。
成组命令也可以用圆括号括起来,执行过程与用花括号形式相同。但二者又有重要的区别:用花括号括起来的成组命令只是在本shell内执行命令表,不产生新的进程。而用圆括号括起来的成组命令时在新的shell内执行,要建立新的子进程。因此,在圆括号内的命令不会改变父shell的变量值及工作目录等。
在用圆括号括起成组命令时,左括号后不必有空格,右括号之前也不需加上分号。