一、通配符
1.一般通配符
*(星号),它匹配任意字符的0次或多次出现
?(问号),它匹配任意一个字符
[ ](一对方括号),其中有一个字符组。其作用是匹配该字符组所限定的任何一个字符
!(惊叹号),如果它紧跟在一对方括号的左方括号([)之后,则表示不在一对方括号中所列出的字符
2.模式表达式 ——是那些包含一个或多个通配符的字
*(模式表)——匹配给定模式表中“模式”的0次或多次出现,各模式之间以“|”分开(下同)
+(模式表)——匹配给定模式表中“模式”的1次或多次出现
?(模式表)——匹配模式表中任何一种“模式”的0次或1次出现
@(模式表)——仅匹配模式表中给定“模式”的一次出现
!(模式表)——除给定模式表中的一个“模式”之外,可以匹配其他任何东西
二、引号
1.双引号
由双引号括起来的字符(除$、倒引号(`)和反斜线()外)均作为普通字符对待。
2.单引号
由单引号括起来的字符都作为普通字符出现
3.倒引号
倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分。
倒引号还可以嵌套使用。但应注意,嵌套使用时内层的倒引号必须用反斜线()将其转义。
三、输入/输出重定向符
自动打开三个标准文件,即标准输入文件(stdin),标准输出文件(stdout)和标准出错输出文件(stderr)。
1.输入重定向符
一般形式是:命令 < 文件名 如:$ score < file1
2.输出重定向符
一般形式是:命令 > 文件名 如:$ who > abc
3.输出附加定向符
一般形式是:命令>>文件名 如:$ ps -l >> psfile
输入和输出重新定向可以连在一起使用。例如:
$ wc -l <infile >outfile
4.即时文件(Here Document)定向符
即时文件的形式是:
命令 [参数]<< 标记符输入行…标记符
注意:标记符要成对出现
例如:
# mail $1 << !! Best wishes to you on your birthday . !!
5.与文件描述字有关的重定向
•系统为每个进程自动打开三个标准文件(即标准输入、标准输出和错误输出),其文件描述字分别为0,1和2。
•标准错误输出也可重定向到一个文件中,其一般形式是:
$ 命令 2>文件名 $ 命令 2>>文件名
•标准输出和标准错误输出可以重定向到同一个文件,一般形式是:
$ command $>file
•等价于下面形式的命令:
$ command > file 2>&1
四、注释、管道线和后台命令
1.注释
#!/bin/bash # If no arguments, then listing the current directory. # Otherwise, listing each subdirectory.
2.管道线
$ ls -l $HOME | wc -l $ ls | grep m?.c | wc -l
3.后台命令
$ gcc m1.c &
五、命令执行操作符
1.顺序执行
在执行时,以分号隔开的各条命令从左到右依次执行:
pwd ; who | wc -l ; cd /usr/bin
2.逻辑与
命令1 && 命令2
其功能是,先执行命令1,如果执行成功,才执行命令2;否则,若命令1执行不成功,则不执行命令2。
3.逻辑或
命令1 || 命令2
其功能是,先执行命令1,如果执行不成功,则执行命令2;否则,若命令1执行成功,则不执行命令2。
六、成组命令
1.{ }形式
以花括号括起来的全部命令可视为语法上的一条命令,出现在管道符的一边。
$ { echo "User Report for `date`."; who; } | pr
使用花括号时在格式上应注意:左括号 “{ ”后面应有一个空格;右括号“}”之前应有一个分号( ;)
2.( )形式
(echo "Current directory is `pwd` . " cp /home/iron; ls -l; cp m1 em1 && rm m1 cat em1) | pr
二者存在重要区别:用花括号括起来的成组命令只是在本shell内执行命令表,不产生新的进程;而用圆括号括起来的成组命令是在新的子shell内执行,要建立新的子进程。因此,在圆括号内的命令不会改变父shell的变量值及工作目录等。