管道符、重定向与环境变量

输入输出重定向

输入重定向是指把文件导入到命令中,输出重定向是指把原本要输出到屏幕的数据信息写入到指定文件中
相比于输入重定向,输出重定向使用频率要更高,所以进一步划分为标准输出重定向和错误输出重定向,以及覆盖写和追加写两种写入方式

  1. 标准输入重定向(STDIN,文件描述为0):
    默认从键盘输入,也可以从其他文件或命令中输入
  2. 标准输出重定向(STDOUT,文件描述为1):
    默认输出到屏幕
  3. 错误输出重定向(STDERR,文件描述为2):
    默认输出到屏幕

输入重定向中用到的符号及其作用如下表所示

符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 文件 从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2

输出重定向中用到的符号及其作用

符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件2>&1 或 命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

例:
通过标准重定向将man bash命令原本要输出到屏幕的信息写入到文件readme.txt
man bash > readme.txt

管道命令符

把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入

例:
统计被限制登录的用户
grep /sbin/nologin /etc/passwd | wc -l

可使用多次管道命令符,如命令A | 命令B | 命令C

命令行的通配符

通配符就是通用匹配信息的符号,比如

  1. 星号*代表匹配0个或多个字符
  2. 问号?代表匹配单个字符

更多通配符如下表所示

通配符 含义
[a-z] 单个小写字母
[A-Z] 单个大写字母
[a-Z] 单个字母
[0-9] 单个数字
[[:alpha:]] 任意字母
[[:upper:]] 任意大写字母
[[:lower:]] 任意小写字母
[[:digit:]] 所以数字
[[:alnum:]] 任意字母加数字
[[:punct:]] 标点符号

常用转义字符

四个最常用转义字符

  1. 反斜杠 \
  2. 单引号 ‘’
  3. 双引号 “”
  4. 反引号 ``

例:
衬衫的价格是九磅十五便士
echo “Price is \£9.15”

重要的环境变量

在Linux系统中,变量名称一般都是大写的,命令都是小写的
Linux中最重要的环境变量如下表所示

环境变量 作用
HOME 用户的主目录(家目录)
SHELL 用户在使用的Shell解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
MAIL 邮件保存路径
LANG 系统语言、语系名称
RANDOM 生成一个随机数字
PS1 Bash解释器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器

正则表达式

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符
例如,“n”匹配字符“n”。“\n”匹配一个换行符。序列“\”匹配“\”而“(”则匹配“(”
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
{n} n 是一个非负整数。匹配确定的 n 次
例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个 o
{n,} n 是一个非负整数。至少匹配 n 次
例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有 o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”
{n,m} m 和 n 均为非负整数,其中 n<=m。最少匹配 n 次且最多匹配 m 次
例如,“o{1,3}”将匹配“fooooood”中的前三个 o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格
* 匹配前面的子表达式零次或多次
例如,zo*能匹配“z”、“zo”以及“zoo”。*等价于{0,}
+ 匹配前面的子表达式一次或多次
例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}
? 匹配前面的子表达式零次或一次
例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}
? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串
例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”
. 匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式
(pattern) 匹配 pattern 并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符,请使用 “(”,右括号同样
x | y 匹配 x 或 y
例如,“z | food” 能匹配 “z” 或 “food”。“(z | f)ood”则匹配“zood”或“food”
[xyz] 字符集合(character class)。匹配所包含的任意一个字符
例如,“[abc]”可以匹配“plain”中的“a”。其中特殊字符仅有反斜线\保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果出现在首位则仅作为普通字符
[^xyz] 排除型(negate)字符集合。匹配未列出的任意字符
例如,“[^abc]”可以匹配“plain”中的“plin”
[a-z] 字符范围。匹配指定范围内的任意字符
例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符
[^a-z] 排除型的字符范围。匹配任何不在指定范围内的任意字符
例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符