Shell除了命令,还有一些作用很强大的符号,比如引号、通配符、连接符等。这些符号在Shell命令中有着各种各样的作用,借助这些符号,用户可以用命令完成更复杂的功能。本节将对Shell中常用的符号进行讲解。Shell除了命令,还有一些作用很强大的符号,比如引号、通配符、连接符等。这些符号在Shell命令中有着各种各样的作用,借助这些符号,用户可以用命令完成更复杂的功能。本节将对Shell中常用的符号进行讲解。
引号
在Shell中,引号主要用来转换元字符的含义。所谓元字符是指那些在正则表达式(正则表达式将在3.4节学习)中具有特殊处理能力的字符,例如$、\、>等字符。
Shell中的引号有三种:单引号('')、双引号("")与反引号(``)。接下来分别来学习一下这几种引号。
1、单引号
单引号可以将它中间的字符还原为字面意义,实现屏蔽Shell元字符的功能。引号里的字符串就是一个单纯的字符串,没有任何含义,例如定义变量NUM=100,在输出变量时需要添加$符号,如果这个变量加上单引号输出,则直接将$符号与变量整体作为一个字符串输出,命令如下所示。
[itheima@localhost ~]$NUM=100
[itheima@localhost ~]$echo $NUM
100
[itheima@localhost ~]$echo '$NUM'
$NUM
在第二次加单引号输出$NUM时,直接输出了一个字符串而不是值100,单引号将$符号的功能屏蔽了。
注意:不可以在两个单引号中间单独插入一个单引号,单引号必须要成对出现。
2、双引号
双引号也具有屏蔽作用,但它不会屏蔽$符号、\符号和``符号。将刚才定义的变量NUM加双引号输出,具体如下所示:
[itheima@localhost ~]$echo "$NUM"
100
由以上输出结果可知,使用双引号输出变量NUM时,$符号的功能不会被屏蔽。
注意:双引号也可以屏蔽单引号的作用,在一对双引号中,单引号不必成对出现。
3、反引号
反引号,它可以进行命令替换。反引号与双引号可以结合使用。例如输出系统的时间,具体操作如下。
[itheima@localhost ~]$echo "Today is `date`"
Today is 2017年09月07日星期四10:50:26 CST
以上所示的命令中用到了命令“date”, 该命令的功能是打印系统当前的时间 。
可以把反引号嵌入到双引号中,但是当把反引号嵌入到单引号中时,单引号会屏蔽掉反引号的功能。例如把`date`嵌入单引号中,将不会打印出当前的时间。
[itheima@localhost ~]$echo 'Today is `date`'
Today is `date`
通配符
Shell的通配符一般用于数据处理或文件名匹配,常用的通配符如下所示。
下面将对表格中所示的通配符逐一讲解。
1、通配符
“*”如果用户想要列出/etc目录下以sys开头的所有文件,可以使用如下命令。
[itheima@localhost~]$ls -d /etc/sys*
sysconfig sysctl.conf sysctl.d systemd system-release
system-release-cpe
在以上命令中,sys*表示匹配以字符串sys开头的所有文件。-d选项表示仅对目标目录本身进行处理,不递归处理目录中的文件。
如果想输出以.conf结尾的所有文件,则可以使用如下命令。
[itheima@localhost ~]$ls /etc/*.conf
asound.conf fuse.conf man_db.conf rsyncd.conf
autofs.conf GeoIP.conf mke2fs.conf rsyslog.conf
autofs_ldap_auth.conf host.conf mtools.conf sestatus.conf
brltty.conf idmapd.conf nfsmount.conf sos.conf
......
在这个命令中,*.conf表示匹配所有以.conf字符串结尾的文件,此命令会输出所有以.conf结尾的文件。因为文件太多,在这里只截取一部分。
2、通配符“?”
通配符“?”每次只能匹配一个字符,通常与其它通配符结合使用。如果想查找/etc目录下文件名是由两个字符组成的文件,可以使用如下命令。
[itheima@localhost ~]$ls -d /etc/??
hp pm
3、通配符“[]”
通配符“[]”表示与[]中的任一字符匹配,它通常是一个范围,例如,在/etc目录,列出以f~h范围的字母开头,并以.conf结尾的文件,可以使用如下命令。
[itheima@localhost ~]$ls /etc/[f-h]*.conf
fprintd.conf fuse.conf GeoIP.conf host.conf
由输出结果可知,/etc目录下以f~h范围内的字母开头,并以.conf结尾的文件有四个。
4、通配符“[!]”
通配符“[!]”表示除了[]里的字符,与其它任一字符匹配。例如,如果查找以y开头且不以.conf结尾的文件,可以使用如下命令。
[itheima@localhost ~]$ls -d /etc/y*[!.conf]
yum yum.repos.d
由输出结果可知,/etc目录下符号条件的匹配项有两个。
连接符
Shell中提供了一组用于连接命令的符号,包括:“;”、“&&”以及“||”, 使 用 这 些 符 号 ,可以将多条Shell指令进行连接,使这些指令顺序或根据命令执行结果,有选择地执行。下面将对这些符号的功能分别进行介绍。
1、“;”连接符
使用“;”连接符间隔的命令,会按照先后次序依次执行。假如现在有一系列确定的操作需要执行,且这一系列操作的执行需要耗费一定时间,比如安装gdb包时,在下载好安装包后,还需要逐个执行以下命令:
[root@localhost ~]#tar –xzvf gdb-7.11.1.tar.gz
[root@localhost ~]#cd gdb-7.11.1
[root@localhost ~]#./configure
[root@localhost ~]#make
[root@localhost ~]#make install
[root@localhost ~]#gdb -v
且在大多数命令开始执行后,都需要一定的时间,等待命令执行完毕。若此时使用“;”连接符,连接这些命令,具体如下所示:
[root@localhost ~]#tar -xzvf gdb-7.11.1.tar.gz ;cd gdb-7.11.1;./configure;
make;makeinstall;gdb -v
那么系统会自动执行这一系列命令。
2、“&&”连接符
使用“&&”连接符连接的命令,其前后命令的执行遵循逻辑与关系,只有该连接符之前的命令执行成功后,它后面的命令才被执行。
3、“||”连接符
使用“||”连接符连接的命令,其前后命令的执行遵循逻辑或关系,只有该连接符之前的命令执行失败时,它后面的命令才会执行。