Shell(bash)的元字符(Meta Character)是指键盘上可输入的对于Shell来说具有其他特殊含义的字符。
简单的讲就是元字符:一些有特殊意义的字符,可以替代其他字符的字符。下面分别介绍:
(1)~ ,- 和 /
这几个符号都是需要在cd命令之后使用的。
~表示/home/username目录,
-表示来时的路径,同时也是命令行参数的前置符号,
/表示根目录,/同时也是Linux下路径中使用的符号。
[xinlin@localhost ~]$ cd Python-3.7.1
[xinlin@localhost Python-3.7.1]$ cd ~
[xinlin@localhost ~]$ pwd
/home/xinlin
[xinlin@localhost ~]$ cd /
[xinlin@localhost /]$ pwd
/
[xinlin@localhost ~]$ cd - # 这样可以方便的回到来时的路径。
(2)*, ? 和 []
这三个符号其实就是正则表达式里面的符号,其含义也与正则表达式一样。
*,表示匹配0个或多个任意字符;
?,表示匹配1个任意支付;
[],表示匹配方括号中的某一个字符;
查询test目录以a开头的文件?
ls a*
查询test目录以txt为后缀的文件?
ls *.txt
删除以b开头的文件?
rm b*
查询test目录第二个字符为b的文件?
ls ?b*
查询test目录以a开头的文件,文件名的长度是3字符?
ls a??
touch link1.txt link2.txt n.txt k.txt
ls *[link]*.txt (4)
ls *link*.txt(2)
ls [b-fB-F]*.txt(0)
(3)&,&& 和 ;
&用于命令行的末尾,表示让此命令在后台执行,具体可参考:Linux命令的前台执行和后台执行
&&用于连接多个命令,当前一个命名执行成功后,继续执行后一个命令;常用语编译安装软件,make && make install。
; 也是用于临街多个命令,不同于&&的地方在于,使用;连接的命令,总是会被执行,不管前一个命令执行是正确还是错误,后面的命令总会被执行。例如:cal; date
注意:如果是将多个命令以回车换行的方式写入.sh脚本文件,执行这个脚本,效果与使用;一样,不管前面行的命令执行是否正确,后面行的命令总是会被执行(除非执行exit命令,而且必须是bash shellfile.sh的方式执行)。
(4) |
管道符号,用于将左边程序执行的输入传给右边程序继续执行,比如:
cat filename | more
ps -e | grep httpd
(5)>,>>,<
重定向符号,
“>”,重定向输出到文件,覆盖文件的内容:
cal 10 2014 > test.txt
“>>”,重定向输出到文件,追加文件的内容:
[xinlin@localhost ~]$ cal 7 2013 >> test.txt
[xinlin@localhost ~]$ cat test.txt
October 2014
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
July 2013
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
“
[xinlin@localhost ~]$ cat < test.txt # 就是cat test.txt
October 2014
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
July 2013
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
[xinlin@localhost ~]$ cat < test.txt > tt.txt # 相当于cp test.txt tt.txt
[xinlin@localhost ~]$ll
total 28120
-rw-rw-r--. 1 xinlin xinlin 133 Feb 10 19:15 211802.txt
drwxrwxr-x. 23 xinlin xinlin 20480 Dec 29 20:51 git-2.9.5
-rw-rw-r--. 1 xinlin xinlin 5928730 Dec 28 22:32 git-2.9.5.tar.gz
drwxrwxr-x. 4 xinlin xinlin 126 Jan 30 22:12 LinkAnalyser
drwxr-xr-x. 19 xinlin xinlin 4096 Dec 28 21:04 Python-3.7.1
-rw-rw-r--. 1 xinlin xinlin 22802018 Dec 28 20:12 Python-3.7.1.tgz
drwxrwxr-x. 6 xinlin xinlin 4096 Jan 30 21:47 teapot
-rw-rw-r--. 1 xinlin xinlin 38 Feb 10 19:10 test.sh
-rw-rw-r--. 1 xinlin xinlin 284 Feb 10 19:17 test.txt
-rw-rw-r--. 1 xinlin xinlin 284 Feb 10 19:18tt.txt
[xinlin@localhost ~]$cat tt.txt
October 2014
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
July 2013
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
(6)!
(7)$
应用shell全局变量,例如:
echo $PATH
(8).
. 就是source命令,请参考:Linux下的source命令
有的地方说这是shell的文件包含,顾名思义,在同一个bash进程中,包含某个文件里面的shell语句。
(9)()
创建一个subshell,在subshell中运行()中的脚本。
(),表示在另一个进程中运行()中的脚本,有点像bash file;
$(),表示使用()中的脚本运行之后的打印,也称为命令替换;与反引号(Esc键下面的那个)的效果一样:
[xinlin@localhost ~]$ echo `date`
Mon Feb 11 17:10:25 CST 2019
[xinlin@localhost ~]$ echo $(date)
Mon Feb 11 17:10:29 CST 2019
使用反引号的唯一理由,似乎只是还有些老旧的shell程序还支持,而不支持$()方式。
(... &),表示()中的脚本在后台运行,且其父进程号为1,效果与
(10){}