更新時間:2022-04-08 來源:黑馬程序員 瀏覽量:
Shell除了命令,還有一些作用很強大的符號,比如引號、通配符、連接符等。這些符號在Shell命令中有著各種各樣的作用,借助這些符號,用戶可以用命令完成更復(fù)雜的功能。本節(jié)將對Shell中常用的符號進行講解。Shell除了命令,還有一些作用很強大的符號,比如引號、通配符、連接符等。這些符號在Shell命令中有著各種各樣的作用,借助這些符號,用戶可以用命令完成更復(fù)雜的功能。本節(jié)將對Shell中常用的符號進行講解。
在Shell中,引號主要用來轉(zhuǎn)換元字符的含義。所謂元字符是指那些在正則表達式(正則表達式將在3.4節(jié)學(xué)習(xí))中具有特殊處理能力的字符,例如$、\、>等字符。
Shell中的引號有三種:單引號('')、雙引號("")與反引號(``)。接下來分別來學(xué)習(xí)一下這幾種引號。
單引號可以將它中間的字符還原為字面意義,實現(xiàn)屏蔽Shell元字符的功能。引號里的字符串就是一個單純的字符串,沒有任何含義,例如定義變量NUM=100,在輸出變量時需要添加$符號,如果這個變量加上單引號輸出,則直接將$符號與變量整體作為一個字符串輸出,命令如下所示。
[itheima@localhost ~]$NUM=100 [itheima@localhost ~]$echo $NUM 100 [itheima@localhost ~]$echo '$NUM' $NUM在第二次加單引號輸出$NUM時,直接輸出了一個字符串而不是值100,單引號將$符號的功能屏蔽了。
注意:不可以在兩個單引號中間單獨插入一個單引號,單引號必須要成對出現(xiàn)。
雙引號也具有屏蔽作用,但它不會屏蔽$符號、\符號和``符號。將剛才定義的變量NUM加雙引號輸出,具體如下所示:
[itheima@localhost ~]$echo "$NUM" 100
由以上輸出結(jié)果可知,使用雙引號輸出變量NUM時,$符號的功能不會被屏蔽。
注意:雙引號也可以屏蔽單引號的作用,在一對雙引號中,單引號不必成對出現(xiàn)。
反引號,它可以進行命令替換。反引號與雙引號可以結(jié)合使用。例如輸出系統(tǒng)的時間,具體操作如下。
[itheima@localhost ~]$echo "Today is `date`" Today is 2017年09月07日星期四10:50:26 CST
以上所示的命令中用到了命令“date”, 該命令的功能是打印系統(tǒng)當(dāng)前的時間 。
可以把反引號嵌入到雙引號中,但是當(dāng)把反引號嵌入到單引號中時,單引號會屏蔽掉反引號的功能。例如把`date`嵌入單引號中,將不會打印出當(dāng)前的時間。
[itheima@localhost ~]$echo 'Today is `date`' Today is `date`
Shell的通配符一般用于數(shù)據(jù)處理或文件名匹配,常用的通配符如下所示。
下面將對表格中所示的通配符逐一講解。
“*”如果用戶想要列出/etc目錄下以sys開頭的所有文件,可以使用如下命令。
[itheima@localhost~]$ls -d /etc/sys* sysconfig sysctl.conf sysctl.d systemd system-release system-release-cpe
在以上命令中,sys*表示匹配以字符串sys開頭的所有文件。-d選項表示僅對目標目錄本身進行處理,不遞歸處理目錄中的文件。
如果想輸出以.conf結(jié)尾的所有文件,則可以使用如下命令。
[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字符串結(jié)尾的文件,此命令會輸出所有以.conf結(jié)尾的文件。因為文件太多,在這里只截取一部分。
通配符“?”每次只能匹配一個字符,通常與其它通配符結(jié)合使用。如果想查找/etc目錄下文件名是由兩個字符組成的文件,可以使用如下命令。
[itheima@localhost ~]$ls -d /etc/?? hp pm
通配符“[]”表示與[]中的任一字符匹配,它通常是一個范圍,例如,在/etc目錄,列出以f~h范圍的字母開頭,并以.conf結(jié)尾的文件,可以使用如下命令。
[itheima@localhost ~]$ls /etc/[f-h]*.conf fprintd.conf fuse.conf GeoIP.conf host.conf
由輸出結(jié)果可知,/etc目錄下以f~h范圍內(nèi)的字母開頭,并以.conf結(jié)尾的文件有四個。
通配符“[!]”表示除了[]里的字符,與其它任一字符匹配。例如,如果查找以y開頭且不以.conf結(jié)尾的文件,可以使用如下命令。
[itheima@localhost ~]$ls -d /etc/y*[!.conf] yum yum.repos.d
由輸出結(jié)果可知,/etc目錄下符號條件的匹配項有兩個。
Shell中提供了一組用于連接命令的符號,包括:“;”、“&&”以及“||”, 使 用 這 些 符 號 ,可以將多條Shell指令進行連接,使這些指令順序或根據(jù)命令執(zhí)行結(jié)果,有選擇地執(zhí)行。下面將對這些符號的功能分別進行介紹。
使用“;”連接符間隔的命令,會按照先后次序依次執(zhí)行。假如現(xiàn)在有一系列確定的操作需要執(zhí)行,且這一系列操作的執(zhí)行需要耗費一定時間,比如安裝gdb包時,在下載好安裝包后,還需要逐個執(zhí)行以下命令:
[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
且在大多數(shù)命令開始執(zhí)行后,都需要一定的時間,等待命令執(zhí)行完畢。若此時使用“;”連接符,連接這些命令,具體如下所示:
[root@localhost ~]#tar -xzvf gdb-7.11.1.tar.gz ;cd gdb-7.11.1;./configure; make;makeinstall;gdb -v
那么系統(tǒng)會自動執(zhí)行這一系列命令。
使用“&&”連接符連接的命令,其前后命令的執(zhí)行遵循邏輯與關(guān)系,只有該連接符之前的命令執(zhí)行成功后,它后面的命令才被執(zhí)行。
使用“||”連接符連接的命令,其前后命令的執(zhí)行遵循邏輯或關(guān)系,只有該連接符之前的命令執(zhí)行失敗時,它后面的命令才會執(zhí)行。