在工作中,难免遇到记不得文件名称需要进行模糊匹配或者需要匹配特定对象的情况,这个时候,就会在命令中用到通配符。
举个栗子:
afei@ubuntu:~/workspace$ ls -l file?
使用通配符 * 匹配任意字符,除了 log.text 其他的都显示出来了
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 file1
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 file2
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 fileE
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 fileq
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 fileR
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 filew
afei@ubuntu:~/workspace$
afei@ubuntu:~/workspace$ ls -l file[1-9]
使用通配符 [1-9] 匹配数字 1-9 之间的数字,把文件名最后一位是数字的文件显示了出来
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 file1
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 file2
afei@ubuntu:~/workspace$
afei@ubuntu:~/workspace$ ls -l file[a-z]
使用通配符 [a-z] 匹配字母 a-z 之间的数字,把文件名最后一位是小写字母的文件显示了出来
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 fileq
-rw-rw-r-- 1 afei afei 0 Oct 20 05:36 filew
afei@ubuntu:~/workspace$
afei@ubuntu:~/workspace$ cd ..
afei@ubuntu:~$ ls -l workspace/*.text
使用通配符 * 匹配任意字符, log.text 显示出来了
-rw-rw-r-- 1 afei afei 0 Oct 20 05:44 workspace/log.text
afei@ubuntu:~$
linux中的通配符:
通配符 | 含义 |
* | 任意字符 |
? | 任意单个任意字符 |
[a-z] | 单个小写字母 |
[A-Z] | 单个大写字母 |
[a-Z] | 单个字母 |
[0-9] | 单个数字 |
[[:alpha:]] | 任意字母 |
[[:upper:]] | 任意大写字母 |
[[:lower:]] | 任意小写字母 |
[[:digit:]] | 所有数字 |
[[:alnum:]] | 任意字母加数字 |
[[:punct:]] | 标点符号 |
元字符:
字符 | 说明 |
; | 命令分隔符,在前一个命令结束时,忽略其返回值,继续执行下一个命令 |
& | 后台运行命令,最大的好处是无需等待命令执行结束,就可以在同一命令行下继续输入命令 |
= | 变量名=值,为变量赋值。注意"="左右紧跟变量名和值,中间不要有空格 |
$ | 变量取值,"$变量名"替换为shell变量的"值",为避免在文本连接时混淆,请使用${变量名} |
> | 输出重定向,prog > file 将标准输出重定向到文件(覆盖原文件内容) |
>> | 输出重定向,prog >> file 将标准输出追加到文件 |
< | 输入重定向,prog < file 从文件file中获取标准输入 |
| | 管道命令,例:p1 | p2 将p1的标准输出作为p2的标准输入 |
() | 在子shell中执行命令,或用于运算,或用于命令替换($(command)) |
{} | 在当前shell中执行命令,或用在变量替换的界定范围(例如上面的${变量名}用法) |
&& | 前一个命令执行成功后,才继续执行下一个命令。例:p1 && p2 ,若p1执行成功后,才执行p2,反之,不执行p2 |
|| | 前一个命令执行失败后,才继续执行下一个命令。例:p1 || p2 ,若p1执行成功后,不执行p2,反之,才执行p2 |
! | 执行历史记录(history列表)中的命令,如!1 |
~ | 用户主目录 |
举个栗子:
~ 家目录、 ;命令分隔符号、 > 重定向符
afei@ubuntu:~/workspace$
afei@ubuntu:~/workspace$ cd ~
回到用户主目录
afei@ubuntu:~$
afei@ubuntu:~$ touch test.text; echo "This is a test file" > test.text
创建 test.text 文件,并在创建完成之后,将字符串重定向下入到该文件
afei@ubuntu:~$
afei@ubuntu:~$ ls -l test.text
-rw-rw-r-- 1 afei afei 20 Oct 20 06:38 test.text
afei@ubuntu:~$
afei@ubuntu:~$ cat test.text
This is a test file
afei@ubuntu:~$
= 变量赋值符、 $ 变量取值符
afei@ubuntu:~$ NAME=afei
afei@ubuntu:~$ echo $NAME
afei
afei@ubuntu:~$
{}
afei@ubuntu:~$ echo $NAMEhahaha
输出为空,找不到变量 NAMEhahaha
afei@ubuntu:~$
afei@ubuntu:~$ echo ${NAME}hahaha
afeihahaha
找到变量 NAME 并将字符 hahaha 拼接到后面
afei@ubuntu:~$
其他的可以自行探索!!!
转义符:
在日常使用 linux 或者编写 shell 脚本的时候,常常会遇到一些特殊的字符,这些字符会与变量,文件名等产生冲突,导致执行错误。这个时候我们为了更清楚的向解释器表达命令的含义,就需要使用转义符,来清楚的表示我们要解释器做的事情。
常用的转义符有这些:
反斜杠(\):使反斜杠后面的一个变量变为纯字符。
单引号(' '):转义其中所有的变量为纯字符串。
双引号(" "):保留其中的变量属性,不进行转义处理。
反引号(` `):把其中的命令执行后返回结果。
举个栗子:
单引号 ' ' 和双引号 " " 的使用:
afei@ubuntu:~$ NAME=afei
定义变量 NAME 值为 afei
afei@ubuntu:~$
afei@ubuntu:~$ echo 'This is $NAME'
This is $NAME
使用单引号,输出内容全部被转义成了字符输出,没有引用变量值
afei@ubuntu:~$
afei@ubuntu:~$ echo "This is $NAME"
This is afei
使用双引号,输出内容中的变量没有转义为字符,引用了变量值
afei@ubuntu:~$
/ 符号的使用:
输出 NAME 变量值到屏幕,当使用 \ 符号时, $ 被转义为纯字符,不再具有元字符的功能,所以就没有获取到 NAME 的变量值
afei@ubuntu:~$ echo $NAME
afei
afei@ubuntu:~$ echo \$NAME
$NAME
afei@ubuntu:~$