一、Shell概述
Shell作为一个命令解释器,拥有内建Shell命令集。作为用户与内核间交互的接口,接收用户命令传给内核去执行。
Shell也是程序设计语言,允许用户编写Shell命令组成的程序,称为Shell脚本。任何Linux命令都可以编入可执行的Shell程序中。
二、Shell用法
bash是Ubuntu默认使用的Shell程序。bash是sh的增强版,sh脚本能在bash中运行。要改变当前Shell程序只需要在命令行输入Shell名称,还可以嵌套多个Shell,用exit逐个退出。
1.正则表达式
通配符:
通配符用于模式匹配,如字符串查找、文件名匹配与搜索等。常用通配符有以下6种:
*(星号):表示任何字符串。例如,*log*表示含有log的字符串。
? (问号):表示任何单个字符。例如,a?e表示由a、任意字符和e组成的字符串。
[ ](一对方括号):表示一个字符序列,字符序列可以直接包括若干字符,
例如[abc]表示a、b、c之中的任一字符,
也可以是由“-”连接起止字符形成的序列,
例如[abc-fp]表示a、b、c、d、e、f、p之中的任一字符。 除连字符“-”之外,其他特殊字符在[]中都是普通字符,包括*和?。
!(感号)在[ ]中使用!表示排除其中任意字符,如[!ab]表示不是a或b的任一字符。
^(幂符号)只在一行开头匹配字符串、 如执行命令ls-l.^d将显示所有的目录。
$(美元符号)只在行尾匹配字符串,它放在匹配单词的后面。例如linux$表示以单词linux结尾的所有文件。
模式表达式(包含一个或多个通配符的字符串):
各模式间以竖线(|)分开。
*匹配任意多个模式。
例如file*(.c|.o)匹配文件file.c、file.o、 file.c.o、 file.c.c、 file.o.c、file等,
但不匹配file.h、file.s 等。
+:匹配1个或多个模式。
例如,file+(.c|.o)匹配文件file.c、 file.o、 file.o.c、 file.c.o等,
但不匹配file。
? :匹配模式表中任何一种模式。
例如,file?(.c|.o)只匹配file、 file.c、 file.o 等,
不匹配file.c.c、file.c.o 等。
@:仅匹配模式表中一个给定模式。
例如,file@(.c|.o)只匹配file.c和file.o,
但不匹配file、file.c.c、file.c.o 等。
!:除给定模式表中的一个模式之外,它可以匹配其他任何字符串。
模式表达式可以递归,即每个表达式中都可以包含一个或多个模式。例如,file*(.[cho]|.sh)
是合法的模式表达式。
2.Shell特殊字符
在Shell中的引号有3种,即单引号、双引号和反引号。
单引号(')括起来的字符串视为普通字符串,包括空格、$、/、\等特殊字符。
双引号(")括起来的字符串,除$、\、单引号和双引号仍作为特殊字符并保留其特殊功能外,其他都视为普通字符对待。
将$、\、单引号和双引号作为普通字符,在其前面加上转义符\即可。
反引号(`)括起来的字符串被Shell解释为命令行,
在执时首先执行该命令行,并以它的标准输出结果替代该命令行(反引号括起来的部分,包括反引号)。
#(注释)
\(跳转符号,将特殊字符或通配符还原成一般字符)
|(分隔两个管道命令)
;(分隔多个命令)
/~(用户的主目录)
$(变量前需要加的变量值)
&(将该行号前的命令放到后台执行)