日常的linux系統(tǒng)管理工作中必不可少的就是shell腳本,如果不會(huì)寫(xiě)shell腳本,那么你就不算一個(gè)合格的管理員。目前很多單位在招聘linux系統(tǒng)管理員時(shí),shell腳本的編寫(xiě)是必考的項(xiàng)目。有的單位甚至用shell腳本的編寫(xiě)能力來(lái)衡量這個(gè)linux系統(tǒng)管理員的經(jīng)驗(yàn)是否豐富。筆者講這些的目的只有一個(gè),那就是讓你認(rèn)真對(duì)待shell腳本,從一開(kāi)始就要把基礎(chǔ)知識(shí)掌握牢固,然后要不斷的練習(xí),只要你shell腳本寫(xiě)的好,相信你的linux求職路就會(huì)輕松的多。筆者在這一章中并不會(huì)多么詳細(xì)的介紹shell腳本,而只是帶你進(jìn)入shell腳本的世界,如果你很感興趣那么請(qǐng)到網(wǎng)上下載相關(guān)的資料或者到書(shū)店購(gòu)買(mǎi)相關(guān)書(shū)籍吧。
在學(xué)習(xí)shell 腳本之前,需要你了解很多關(guān)于shell的知識(shí),這些知識(shí)是編寫(xiě)shell腳本的基礎(chǔ),所以希望你能夠熟練的掌握。
【什么是shell】
簡(jiǎn)單點(diǎn)理解,就是系統(tǒng)跟計(jì)算機(jī)硬件交互時(shí)使用的中間介質(zhì),它只是系統(tǒng)的一個(gè)工具。實(shí)際上,在shell和計(jì)算機(jī)硬件之間還有一層?xùn)|西那就是系統(tǒng)內(nèi)核了。打個(gè)比方,如果把計(jì)算機(jī)硬件比作一個(gè)人的軀體,而系統(tǒng)內(nèi)核則是人的大腦,至于shell,把它比作人的五官似乎更加貼切些?;氐接?jì)算機(jī)上來(lái),用戶直接面對(duì)的不是計(jì)算機(jī)硬件而是shell,用戶把指令告訴shell,然后shell再傳輸給系統(tǒng)內(nèi)核,接著內(nèi)核再去支配計(jì)算機(jī)硬件去執(zhí)行各種操作。
筆者接觸的linux發(fā)布版本(Redhat/CentOS)系統(tǒng)默認(rèn)安裝的shell叫做bash,即Bourne Again Shell,它是sh(Bourne Shell)的增強(qiáng)版本。Bourn Shell 是最早行起來(lái)的一個(gè)shell,創(chuàng)始人叫Steven Bourne,為了紀(jì)念他所以叫做Bourn Shell,檢稱(chēng)sh。那么這個(gè)bash有什么特點(diǎn)呢?
1)記錄命令歷史
我們敲過(guò)的命令,linux是會(huì)有記錄的,預(yù)設(shè)可以記錄1000條歷史命令。這些命令保存在用戶的家目錄中的.bash_history文件中。有一點(diǎn)需要你知道的是,只有當(dāng)用戶正常退出當(dāng)前shell時(shí),在當(dāng)前shell中運(yùn)行的命令才會(huì)保存至.bash_history文件中。
與命令歷史有關(guān)的有一個(gè)有意思的字符那就是”!”了。常用的有這么幾個(gè)應(yīng)用:(1)!! (連續(xù)兩個(gè)”!”),表示執(zhí)行上一條指令;(2)!n(這里的n是數(shù)字),表示執(zhí)行命令歷史中第n條指令,例如”!100”表示執(zhí)行命令歷史中第100個(gè)命令;(3)!字符串(字符串大于等于1),例如!ta,表示執(zhí)行命令歷史中最近一次以ta為開(kāi)頭的指令。
![](/d/20211017/2e6484e2ea85dbd8be6c965398e8b536.gif)
2)指令和文件名補(bǔ)全
在本教程最開(kāi)始筆者就介紹過(guò)這個(gè)功能了,記得嗎?對(duì)了就是按tab鍵,它可以幫你補(bǔ)全一個(gè)指令,也可以幫你補(bǔ)全一個(gè)路徑或者一個(gè)文件名。連續(xù)按兩次tab鍵,系統(tǒng)則會(huì)把所有的指令或者文件名都列出來(lái)。
3)別名
前面也出現(xiàn)過(guò)alias的介紹,這個(gè)就是bash所特有的功能之一了。我們可以通過(guò)alias把一個(gè)常用的并且很長(zhǎng)的指令別名一個(gè)簡(jiǎn)潔易記的指令。如果不想用了,還可以用unalias解除別名功能。直接敲alias會(huì)看到目前系統(tǒng)預(yù)設(shè)的alias :
![](/d/20211017/b8a6b9bf91848bfb75512c9e2764b4b2.gif)
看到了吧,系統(tǒng)預(yù)設(shè)的alias指令也就這幾個(gè)而已,你也可以自定義你想要的指令別名。alias語(yǔ)法很簡(jiǎn)單,alias [命令別名]=['具體的命令']。
4)通配符
在bash下,可以使用*來(lái)匹配零個(gè)或多個(gè)字符,而用?匹配一個(gè)字符。
![](/d/20211017/828669412a2558f6e4558d394843fee5.gif)
5)輸入輸出從定向
輸入重定向用于改變命令的輸入,輸出重定向用于改變命令的輸出。輸出重定向更為常用,它經(jīng)常用于將命令的結(jié)果輸入到文件中,而不是屏幕上。輸入重定向的命令是,輸出重定向的命令是>,另外還有錯(cuò)誤重定向2>,以及追加重定向>>,稍后會(huì)詳細(xì)介紹。
6)管道符
前面已經(jīng)提過(guò)過(guò)管道符”|”,就是把前面的命令運(yùn)行的結(jié)果丟給后面的命令。
7)作業(yè)控制。
當(dāng)運(yùn)行一個(gè)進(jìn)程時(shí),你可以使它暫停(按Ctrl+z),然后使用fg命令恢復(fù)它,利用bg命令使他到后臺(tái)運(yùn)行,你也可以使它終止(按Ctrl+c)。
【變量】
前面章節(jié)中筆者曾經(jīng)介紹過(guò)環(huán)境變量PATH,這個(gè)環(huán)境變量就是shell預(yù)設(shè)的一個(gè)變量,通常shell預(yù)設(shè)的變量都是大寫(xiě)的。變量,說(shuō)簡(jiǎn)單點(diǎn)就是使用一個(gè)較簡(jiǎn)單的字符串來(lái)替代某些具有特殊意義的設(shè)定以及數(shù)據(jù)。就拿PATH來(lái)講,這個(gè)PATH就代替了所有常用命令的絕對(duì)路徑的設(shè)定。因?yàn)橛辛薖ATH這個(gè)變量,所以我們運(yùn)行某個(gè)命令時(shí)不再去輸入全局路徑,直接敲命令名即可。你可以使用echo命令顯示變量的值。
![](/d/20211017/25f356672e7ce5261c96ff7bf9686eb6.gif)
除了PATH, HOME, LOGNAME外,系統(tǒng)預(yù)設(shè)的環(huán)境變量還有哪些呢?
![](/d/20211017/14a0d78d70beee263bd87bce98c1c42d.gif)
使用env命令即可全部列出系統(tǒng)預(yù)設(shè)的全部系統(tǒng)變量了。不過(guò)登錄的用戶不一樣這些環(huán)境變量的值也不一樣。當(dāng)前顯示的就是root這個(gè)賬戶的環(huán)境變量了。下面筆者簡(jiǎn)單介紹一下常見(jiàn)的環(huán)境變量:
PATH決定了shell將到哪些目錄中尋找命令或程序
HOME當(dāng)前用戶主目錄
HISTSIZE歷史記錄數(shù)
LOGNAME當(dāng)前用戶的登錄名
HOSTNAME指主機(jī)的名稱(chēng)
SHELL前用戶Shell類(lèi)型
LANG語(yǔ)言相關(guān)的環(huán)境變量,多語(yǔ)言可以修改此環(huán)境變量
MAIL當(dāng)前用戶的郵件存放目錄
PWD當(dāng)前目錄
env命令顯示的變量只是環(huán)境變量,系統(tǒng)預(yù)設(shè)的變量其實(shí)還有很多,你可以使用set命令把系統(tǒng)預(yù)設(shè)的全部變量都顯示出來(lái)。
![](/d/20211017/69fd95cbb88ab1dfd39e7921d2400d8d.gif)
限于篇幅,筆者在上例中并沒(méi)有把所有顯示結(jié)果都截圖。set不僅可以顯示系統(tǒng)預(yù)設(shè)的變量,也可以連同用戶自定義的變量顯示出來(lái)。用戶自定義變量?是的,用戶自己同樣可以定義變量。
![](/d/20211017/bda6ea1276194e7916eaea6b5d443fc8.gif)
雖然你可以自定義變量,但是該變量只能在當(dāng)前shell中生效,不信你再登錄一個(gè)shell試試?
![](/d/20211017/1ad072a5bcb655beb996e32dd5fc8097.gif)
使用bash命令即可再打開(kāi)一個(gè)shell,此時(shí)先前設(shè)置的myname變量已經(jīng)不存在了,退出當(dāng)前shell回到原來(lái)的shell,myname變量還在。那要想設(shè)置的變量一直生效怎么辦?有兩種情況:
1) 要想系統(tǒng)內(nèi)所有用戶登錄后都能使用該變量
需要在/etc/profile文件最末行加入 “export myname=Aming” 然后運(yùn)行”source /etc/profile”就可以生效了。此時(shí)你再運(yùn)行bash命令或者直接su - test賬戶看看。
![](/d/20211017/e4af8512925880e69e8af4d96558808a.gif)
2)只想讓當(dāng)前用戶使用該變量
需要在用戶主目錄下的.bashrc文件最后一行加入“export myname=Aming” 然后運(yùn)行”source .bashrc”就可以生效了。這時(shí)候再登錄test賬戶,myname變量則不會(huì)生效了。上面用的source命令的作用是,講目前設(shè)定的配置刷新,即不用注銷(xiāo)再登錄也能生效。
筆者在上例中使用”myname=Aming”來(lái)設(shè)置變量myname,那么在linux下設(shè)置自定義變量有哪些規(guī)則呢?
a. 設(shè)定變量的格式為”a=b”,其中a為變量名,b為變量的內(nèi)容,等號(hào)兩邊不能有空格;
b. 變量名只能由英、數(shù)字以及下劃線組成,而且不能以數(shù)字開(kāi)頭;
c. 當(dāng)變量?jī)?nèi)容帶有特殊字符(如空格)時(shí),需要加上單引號(hào);
![](/d/20211017/33b24c9cedd07b34f2a95a2625df9a61.gif)
有一種情況,需要你注意,就是變量?jī)?nèi)容中本身帶有單引號(hào),這就需要用到雙引號(hào)了。
![](/d/20211017/6650943467813164cf363732e18095cd.gif)
d. 如果變量?jī)?nèi)容中需要用到其他命令運(yùn)行結(jié)果則可以使用反引號(hào);
![](/d/20211017/d8dbf6d07d08c64e96c46b3348a4303a.gif)
e. 變量?jī)?nèi)容可以累加其他變量的內(nèi)容,需要加雙引號(hào);
![](/d/20211017/cf5c84cccb18e89fd734790fb8f43551.gif)
在這里如果你不小心把雙引號(hào)加錯(cuò)為單引號(hào),將得不到你想要的結(jié)果
![](/d/20211017/34732c2257e55e4752bc6f4f9d0d18e8.gif)
通過(guò)上面幾個(gè)例子也許你能看得出,單引號(hào)和雙引號(hào)的區(qū)別:用雙引號(hào)時(shí)不會(huì)取消掉里面出現(xiàn)的特殊字符的本身作用(這里的$),而使用單引號(hào)則里面的特殊字符全部失去它本身的作用。
在前面的例子中筆者多次使用了bash命令,如果在當(dāng)前shell中運(yùn)行bash指令后,則會(huì)進(jìn)入一個(gè)新的shell,這個(gè)shell就是原來(lái)shell的子shell了,不妨你用pstree指令來(lái)查看一下。
![](/d/20211017/afa50039c561f9ccd6efdac64d013f78.gif)
pstree這個(gè)指令會(huì)把linux系統(tǒng)中所有進(jìn)程通過(guò)樹(shù)形結(jié)構(gòu)打印出來(lái)。限于篇幅筆者沒(méi)有全部列出,你可以直接輸入pstree查看即可。在父shell中設(shè)定一個(gè)變量后,進(jìn)入子shell后該變量是不會(huì)生效的,如果想讓這個(gè)變量在子shell中生效則要用到export指令,筆者曾經(jīng)在前面用過(guò)。
![](/d/20211017/1c097044343d794308565e002c4698b9.gif)
export其實(shí)就是聲明一下這個(gè)變量的意思,讓該shell的子shell也知道變量abc的值是123.如果export后面不加任何變量名,則它會(huì)聲明所有的變量。
![](/d/20211017/c412efab18dc787d59d36a526059a8b2.gif)
在最后面連同我們自定義的變量都被聲明了。
前面光講如何設(shè)置變量,如果想取消某個(gè)變量怎么辦?只要輸入”unset 變量名”即可。
![](/d/20211017/33c756729523f13571c63e4b14ef9d8f.gif)
用unset abc后,再echo $abc則不再輸出任何內(nèi)容。
【系統(tǒng)環(huán)境變量與個(gè)人環(huán)境變量的配置文件】
上面講了很多系統(tǒng)的變量,那么在linux系統(tǒng)中,這些變量被存到了哪里呢,為什么用戶一登陸shell就自動(dòng)有了這些變量呢?
/etc/profile :這個(gè)文件預(yù)設(shè)了幾個(gè)重要的變量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umas等等。
/etc/bashrc :這個(gè)文件主要預(yù)設(shè)umask以及PS1。這個(gè)PS1就是我們?cè)谇妹顣r(shí),前面那串字符了,例如筆者的linux系統(tǒng)PS1就是 [root@localhost ~]# ,你不妨看一下PS1的值。
![](/d/20211017/5fe47de9e4968dd4d58ae3504656caa2.gif)
\u就是用戶,\h 主機(jī)名, \W 則是當(dāng)前目錄,\$就是那個(gè)'#'了,如果是普通用戶則顯示為'$'
除了兩個(gè)系統(tǒng)級(jí)別的配置文件外,每個(gè)用戶的主目錄下還有幾個(gè)這樣的隱藏文件:
.bash_profile :定義了用戶的個(gè)人化路徑與環(huán)境變量的文件名稱(chēng)。每個(gè)用戶都可使用該文件輸入專(zhuān)用于自己使用的shell信息,當(dāng)用戶登錄時(shí),該文件僅僅執(zhí)行一次。
.bashrc :該文件包含專(zhuān)用于你的shell的bash信息,當(dāng)?shù)卿洉r(shí)以及每次打開(kāi)新的shell時(shí),該該文件被讀取。例如你可以將用戶自定義的alias或者自定義變量寫(xiě)到這個(gè)文件中。
.bash_history :記錄命令歷史用的。
.bash_logout :當(dāng)退出shell時(shí),會(huì)執(zhí)行該文件??梢园岩恍┣謇淼墓ぷ鞣诺竭@個(gè)文件中。
【linux shell中的特殊符號(hào)】
你在學(xué)習(xí)linux的過(guò)程中,也許你已經(jīng)接觸過(guò)某個(gè)特殊符號(hào),例如”*”,它是一個(gè)通配符號(hào),代表零個(gè)或多個(gè)字符或數(shù)字。下面筆者就說(shuō)一說(shuō)常用到的特殊字符。
1. * :代表零個(gè)或多個(gè)字符或數(shù)字。
![](/d/20211017/47685c56572e40e015c1e9fcf0547748.gif)
test后面可以沒(méi)有任何字符,也可以有多個(gè)字符,總之有或沒(méi)有都能匹配出來(lái)。
2. ? :只代表一個(gè)任意的字符
![](/d/20211017/9f5c958a77b3aa0db81fe635dc4240e1.gif)
不管是數(shù)字還是字母,只要是一個(gè)都能匹配出來(lái)。
3. # :這個(gè)符號(hào)在linux中表示注釋說(shuō)明的意思,即”#”后面的內(nèi)容linux忽略掉。
![](/d/20211017/15878bab8d8d3882aaa51abf251a09b6.gif)
在命令的開(kāi)頭或者中間插入”#” ,linux都會(huì)忽略掉的。這個(gè)符號(hào)在shell腳本中用的很多。
4. \ :脫意字符,將后面的特殊符號(hào)(例如”*” )還原為普通字符。
![](/d/20211017/988176bcd2dd49b7f8224b05c3cf5bbb.gif)
5. | :管道符,前面多次說(shuō)過(guò),它的作用在于將符號(hào)前面命令的結(jié)果丟給符號(hào)后面的命令。這里提到的后面的命令,并不是所有的命令都可以的,一般針對(duì)文檔操作的命令比較常用,例如cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等等,其中g(shù)rep, sed, awk為正則表達(dá)式必須掌握的工具,在后續(xù)內(nèi)容中詳細(xì)介紹。
6. $ :除了用于變量前面的標(biāo)識(shí)符外,還有一個(gè)妙用,就是和'!'結(jié)合起來(lái)使用。
![](/d/20211017/1763a8ba13b4a3fecbf82fc66a9a8c11.gif)
‘!$'表示上條命中中最后一個(gè)變量(也許稱(chēng)為變量不合適,總之就是上條命令中最后出現(xiàn)的那個(gè)東西)例如上邊命令最后是test.txt那么在當(dāng)前命令下輸入!$則代表test.txt。
1)grep :過(guò)濾一個(gè)或多個(gè)字符,將會(huì)在后續(xù)內(nèi)容中詳細(xì)介紹其用法。
![](/d/20211017/315c9e780b255dc28cdcc835ccb9afee.gif)
2) cut :截取某一個(gè)字段
語(yǔ)法:cut -d “分隔字符” [-cf] n 這里的n是數(shù)字
-d :后面跟分隔字符,分隔字符要用雙引號(hào)括起來(lái)
-c :后面接的是第幾個(gè)字符
-f :后面接的是第幾個(gè)區(qū)塊
![](/d/20211017/85640a6200d47f3f037d11b4e0780c14.gif)
-d 后面跟分隔字符,這里使用冒號(hào)作為分割字符,-f 1 就是截取第一段,-f和1之間的空格可有可無(wú)。
![](/d/20211017/979cf81d8f16e0b7abe64f10c8b6d259.gif)
-c 后面可以是1個(gè)數(shù)字n,也可以是一個(gè)區(qū)間n1-n2,還可以是多個(gè)數(shù)字n1,n2,n3
![](/d/20211017/e953bce7470715fd319cfa272f356e7c.gif)
3) sort :用做排序
語(yǔ)法:sort [-t 分隔符] [-kn1,n2] [-nru] 這里的n1 n2
-t 分隔符 :作用跟cut的-d一個(gè)意思
-n :使用純數(shù)字排序
-r :反向排序
-u :去重復(fù)
-kn1,n2 :由n1區(qū)間排序到n2區(qū)間,可以只寫(xiě)-kn1,即對(duì)n1字段排序
![](/d/20211017/badbd770f8b3718b1ea33bd7c5b89686.gif)
![](/d/20211017/a8d64f1fe9d0c352b516623a599d3545.gif)
![](/d/20211017/a268a28988f0b1e25b4d010c986f2a02.gif)
4) wc :統(tǒng)計(jì)文檔的行數(shù)、字符數(shù)、詞數(shù),常用的選項(xiàng)為:
-l :統(tǒng)計(jì)行數(shù)
-m :統(tǒng)計(jì)字符數(shù)
-w :統(tǒng)計(jì)詞數(shù)
![](/d/20211017/4cc67ee599eee95a00114b0236f783a8.gif)
5) uniq :去重復(fù)的行,筆者常用的選項(xiàng)只有一個(gè):
-c :統(tǒng)計(jì)重復(fù)的行數(shù),并把行數(shù)寫(xiě)在前面
![](/d/20211017/efef02afe7de18f787e2a8672dedcef2.gif)
有一點(diǎn)需要注意,在進(jìn)行uniq之前,需要先用sort排序然后才能uniq,否則你將得不到你想要的,筆者上面的試驗(yàn)當(dāng)中已經(jīng)是排序過(guò)所以省略掉那步了。
6)tee :后跟文件名,類(lèi)似與重定向”>”,但是比重定向多了一個(gè)功能,在把文件寫(xiě)入后面所跟的文件中的同時(shí),還顯示在屏幕上。
![](/d/20211017/d61b7b68c0e166f2c4971b742a3afc25.gif)
7)tr :替換字符,常用來(lái)處理文檔中出現(xiàn)的特殊符號(hào),如DOS文檔中出現(xiàn)的^M符號(hào)。常用的選項(xiàng)有兩個(gè):
-d :刪除某個(gè)字符,-d 后面跟要?jiǎng)h除的字符
-s :把重復(fù)的字符去掉
最常用的就是把小寫(xiě)變大寫(xiě): tr ‘[a-z]' ‘[A-Z]'
![](/d/20211017/5a33a8dcc9c38388af9fdb4dc8ff783c.gif)
當(dāng)然替換一個(gè)字符也是完全可以的。
![](/d/20211017/83cbe6cd322797c02b5da7c22718ea2c.gif)
不過(guò)替換、刪除以及去重復(fù)都是針對(duì)一個(gè)字符來(lái)講的,有一定局限性。如果是針對(duì)一個(gè)字符串就不再管用了,所以筆者建議只是簡(jiǎn)單了解這個(gè)tr即可,以后你還會(huì)學(xué)到更多可以實(shí)現(xiàn)針對(duì)字符串操作的工具。
![](/d/20211017/94ad696d7e8729905ed9140c6fbdfdec.gif)
8)split :切割文檔,常用選項(xiàng):
-b :依據(jù)大小來(lái)分割文檔,單位為byte
![](/d/20211017/83a7f2cfbd93fe0f6d72b73411b21958.gif)
格式如上例,后面的passwd為分割后文件名的前綴,分割后的文件名為passwdaa, passwdab, passwdac …
-l :依據(jù)行數(shù)來(lái)分割文檔
![](/d/20211017/bab4b7e8d208e440f5c4a0f8421bce7a.gif)
6. ; :分號(hào)。平時(shí)我們都是在一行中敲一個(gè)命令,然后回車(chē)就運(yùn)行了,那么想在一行中運(yùn)行兩個(gè)或兩個(gè)以上的命令如何呢?則需要在命令之間加一個(gè)”;”了。
![](/d/20211017/da86e1034df58f42d0cd67bf29312ac5.gif)
7. ~ :用戶的家目錄,如果是root則是 /root ,普通用戶則是 /home/username
![](/d/20211017/2e9750c2269f686e1c917da841d5a295.gif)
8. :如果想把一條命令放到后臺(tái)執(zhí)行的話,則需要加上這個(gè)符號(hào)。通常用于命令運(yùn)行時(shí)間非常長(zhǎng)的情況。
![](/d/20211017/02337bed7843bc3daac2a4b4ee31378a.gif)
使用jobs可以查看當(dāng)前shell中后臺(tái)執(zhí)行的任務(wù)。用fg可以調(diào)到前臺(tái)執(zhí)行。這里的sleep命令就是休眠的意思,后面跟數(shù)字,單位為秒,常用語(yǔ)循環(huán)的shell腳本中。
![](/d/20211017/b711bd5fc08c9f407e13d8bb653a2e47.gif)
此時(shí)你按一下CTRL +z 使之暫停,然后再輸入bg可以再次進(jìn)入后臺(tái)執(zhí)行。
![](/d/20211017/7f26239eb9247808e7c5304ed5d7d670.gif)
如果是多任務(wù)情況下,想要把任務(wù)調(diào)到前臺(tái)執(zhí)行的話,fg后面跟任務(wù)號(hào),任務(wù)號(hào)可以使用jobs命令得到。
![](/d/20211017/a576044d899794764abcd7e993014892.gif)
9. >, >>, 2>, 2>> :前面講過(guò)重定向符號(hào)> 以及>> 分別表示取代和追加的意思,然后還有兩個(gè)符號(hào)就是這里的2> 和 2>> 分別表示錯(cuò)誤重定向和錯(cuò)誤追加重定向,當(dāng)我們運(yùn)行一個(gè)命令報(bào)錯(cuò)時(shí),報(bào)錯(cuò)信息會(huì)輸出到當(dāng)前的屏幕,如果想重定向到一個(gè)文本里,則要用2>或者2>>。
![](/d/20211017/b10a514ecd476927aa8530cdf885287c.gif)
10. [ ] :中括號(hào),中間為字符組合,代表中間字符中的任意一個(gè)
![](/d/20211017/cdb2ad5bc564a4f6946f055e42b66e6f.gif)
11. 與 ||
在上面剛剛提到了分號(hào),用于多條命令間的分隔符。另外還有兩個(gè)可以用于多條命令中間的特殊符號(hào),那就是 “”和”||”。下面筆者把這幾種情況全列出:
1) command1 ; command2
2) command1 command2
3) command1 || command2
使用”;”時(shí),不管command1是否執(zhí)行成功都會(huì)執(zhí)行command2; 使用””時(shí),只有command1執(zhí)行成功后,command2才會(huì)執(zhí)行,否則command2不執(zhí)行;使用”||”時(shí),command1執(zhí)行成功后command2 不執(zhí)行,否則去執(zhí)行command2,總之command1和command2總有一條命令會(huì)執(zhí)行。
![](/d/20211017/6abb662ecea82a1ab02720aaee9341c0.gif)
您可能感興趣的文章:- linux shell數(shù)組深入學(xué)習(xí)理解
- linux Shell學(xué)習(xí)筆記第一天
- linux Shell學(xué)習(xí)筆記第三天
- shell腳本學(xué)習(xí)與總結(jié)
- linux Shell學(xué)習(xí)筆記第四天
- Shell腳本編程中常用的數(shù)學(xué)運(yùn)算實(shí)例
- shell中case的用法學(xué)習(xí)筆記
- linux Shell學(xué)習(xí)筆記第五天
- linux Shell學(xué)習(xí)筆記最后一節(jié),溫故與知新
- 如何短時(shí)間內(nèi)學(xué)好一門(mén)語(yǔ)言 shell腳本語(yǔ)言為例