十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
沿著前面的軌跡,接下來是Linux中shell腳本的學(xué)習(xí)。這對(duì)于生信工程師后續(xù)處理大量 (海量更合適些) 數(shù)據(jù)是非常非常重要的,但是同樣的,作為一個(gè)有點(diǎn)古板的人,對(duì)于"腳本"是什么意思我都死磕了好久。主要覺得有些抽象,尤其是跟生信的同事討論項(xiàng)目分析部分的問題時(shí),他們經(jīng)常會(huì)說道這個(gè)詞,在他們意識(shí)里這是個(gè)不言自明的術(shù)語,殊不知對(duì)外行人而言 (比如我),那簡直就是無情的"知識(shí)的詛咒"。經(jīng)常是我假裝聽懂了,然后繼續(xù)討論下面的問題,形成一個(gè)模糊的印象。

富縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
百度上的解釋是:腳本(Script)是一種批處理文件的延伸,是一種純文本保存的程序,一般來說的計(jì)算機(jī)腳本程序是確定的一系列控制計(jì)算機(jī)進(jìn)行運(yùn)算操作動(dòng)作的組合,在其中可以實(shí)現(xiàn)一定的邏輯分支等。不知道你能不能看懂,反正我開始的時(shí)候真是一知半解。
鳥哥私房菜的解釋是:shell script是利用 shell 的功能所寫的一個(gè)"程序",這個(gè)程序是使用純文本文件,將一些shell的語法與命令(含外部命令)寫在里面,搭配正則表達(dá)式、管道命令與數(shù)據(jù)流重定向等功能,以達(dá)到我們所想要的處理的目的。不明覺厲,好像更看不懂了···
Jude 的簡單粗暴大白話解釋是:腳本就是Linux中很多命令按照一定規(guī)則的組合,以實(shí)現(xiàn)某個(gè)特定的功能。Linux中有很多簡單的命令,往往只是進(jìn)行了簡單的對(duì)話,比如 cd 就是進(jìn)入到某個(gè)目錄,簡單直接。但是如果我想進(jìn)入某個(gè)目錄A,然后在目錄A中創(chuàng)建目錄B,再在目錄B中創(chuàng)建文本C呢?當(dāng)然可以一步一步操作,如果想要一步到位呢,那就可以用腳本,把三個(gè)命令寫在一起,一起執(zhí)行。好像有點(diǎn)啰嗦···
或者從英語的角度去理解,腳本的對(duì)應(yīng)英文是Script,而這個(gè)單詞的中文釋義中還有劇本的意思。劇本就好理解了啊,劇本就是導(dǎo)演(生信工程師)基于某個(gè)主旨(要實(shí)現(xiàn)的目標(biāo))按照一定的手法(規(guī)則)所寫的一個(gè)故事。不管是哪個(gè)演員,都得按照劇本演。所以,學(xué)好英語對(duì)于生信也是有幫助的~
按照腳本的復(fù)雜程度可以分為:
這個(gè)無需多說,其實(shí)就是若干個(gè)簡單命令的順序排列,執(zhí)行腳本后會(huì)按照命令的前后關(guān)系從前往后一一執(zhí)行。
相對(duì)于簡單的基本腳本,結(jié)構(gòu)化的命令腳本可以施加邏輯流程控制,從而改變程序(命令)執(zhí)行的順序?;灸_本中的命令就是從上往下執(zhí)行,但是結(jié)構(gòu)化的命令腳本可以根據(jù)邏輯判斷重復(fù)或者跳過某些命令。
常用的結(jié)構(gòu)化命令(語句)有:
后面還有什么嵌套循環(huán)啊啥的,不過我覺得上面的7中命令學(xué)到家了,應(yīng)該可以應(yīng)付大部分在生信分析里面的應(yīng)用了。
記得高中的時(shí)候,物理老師(也是班主任)在給我們講解習(xí)題時(shí)有個(gè)有意思的套路:不管什么難題現(xiàn)在下面寫個(gè)"答:",以示自己解決問題的決心,也是一種正向的心理暗示。腳本編寫也是有套路的,不過總的來說還是比較簡單。
對(duì)于簡單的腳本(超級(jí)簡單的那種),直接幾個(gè)命令連在一起即可,中間用";"隔開。
對(duì)于更長更復(fù)雜的腳本,一般需要?jiǎng)?chuàng)建一個(gè)文本,并在里面編輯。這就涉及到了文本編輯器,比較常用和簡單的一般有nano和vim,實(shí)在很簡單,規(guī)則也容易理解,教程隨手可得,不多說。
比如用vim創(chuàng)建了一個(gè)腳本之后,具體的語法(套路):
ok,腳本寫完了,怎么讓腳本開始工作呢?這有涉及到之前講過的環(huán)境變量和相對(duì)路徑、絕對(duì)路徑了。方法有三:
就這么多吧,應(yīng)該有點(diǎn)感覺到了,剩下的就是狂練狂練了~
shell腳本就是一些命令的集合。
舉個(gè)例子,我想實(shí)現(xiàn)這樣的操作:
1)進(jìn)入到/tmp/目錄;
2)列出當(dāng)前目錄中所有的文件名;
3)把所有當(dāng)前的文件拷貝到/root/目錄下;
4)刪除當(dāng)前目錄下所有的文件。
簡單的4步在shell窗口中需要你敲4次命令,按4次回車。這樣是不是很麻煩?當(dāng)然這4步操作非常簡單,如果是更加復(fù)雜的命令設(shè)置需要幾十次操作呢?那樣的話一次一次敲鍵盤會(huì)很麻煩。所以不妨把所有的操作都記錄到一個(gè)文檔中,然后去調(diào)用文檔中的命令,這樣一步操作就可以完成。其實(shí)這個(gè)文檔呢就是shell腳本了,只是這個(gè)shell腳本有它特殊的格式?!秎inux 就該這么學(xué)》
Shell腳本通常都是以.sh 為后綴名的,這個(gè)并不是說不帶.sh這個(gè)腳本就不能執(zhí)行,只是大家的一個(gè)習(xí)慣而已。所以,以后你發(fā)現(xiàn)了.sh為后綴的文件那么它一定會(huì)是一個(gè)shell腳本了。test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,該文件使用的是bash語法。如果不設(shè)置該行,那么你的shell腳本就不能被執(zhí)行?!?’表示注釋,在前面講過的。后面跟一些該腳本的相關(guān)注釋內(nèi)容以及作者和創(chuàng)建日期或者版本等等。當(dāng)然這些注釋并非必須的,如果你懶的很,可以省略掉,但是筆者不建議省略。因?yàn)殡S著你工作時(shí)間的增加,你寫的shell腳本也會(huì)越來越多,如果有一天你回頭查看你寫的某個(gè)腳本時(shí),很有可能忘記該腳本是用來干什么的以及什么時(shí)候?qū)懙摹K詫懮献⑨屖怯斜匾?。另外系統(tǒng)管理員并非你一個(gè),如果是其他管理員查看你的腳本,他看不懂豈不是很郁悶。該腳本再往下面則為要運(yùn)行的命令了。
在Linux下,如果你需要執(zhí)行shell腳本,那么應(yīng)該使用那個(gè)命令呢?下面由我為大家整理了linux shell腳本執(zhí)行命令的相關(guān)知識(shí),希望對(duì)大家有幫助!
linux shell腳本執(zhí)行
linux shell腳本執(zhí)行方法一: 切換到shell腳本所在的目錄(此時(shí),稱為工作目錄)執(zhí)行shell腳本:
cd /data/shell
./hello.sh
./的意思是說在當(dāng)前的工作目錄下執(zhí)行hello.sh。如果不加上./,bash可能會(huì)響應(yīng)找到不到hello.sh的錯(cuò)誤信息。因?yàn)槟壳暗墓ぷ髂夸?/data/shell)可能不在執(zhí)行程序默認(rèn)的搜索路徑之列,也就是說,不在環(huán)境變量PASH的內(nèi)容之中。查看PATH的內(nèi)容可用 echo $PASH 命令?,F(xiàn)在的/data/shell就不在環(huán)境變量PASH中的,所以必須加上./才可執(zhí)行。
linux shell腳本執(zhí)行方法二: 以絕對(duì)路徑的方式去執(zhí)行bash shell腳本:
/data/shell/hello.sh
linux shell腳本執(zhí)行方法三: 直接使用bash 或sh 來執(zhí)行bash shell腳本:
cd /data/shell
bash hello.sh
或
cd /data/shell
sh hello.sh
注意,若是以方法三的方式來執(zhí)行,那么,可以不必事先設(shè)定shell的執(zhí)行權(quán)限,甚至都不用寫shell文件中的第一行(指定bash路徑)。因?yàn)榉椒ㄈ菍ello.sh作為參數(shù)傳給sh(bash)命令來執(zhí)行的。這時(shí)不是hello.sh自己來執(zhí)行,而是被人家調(diào)用執(zhí)行,所以不要執(zhí)行權(quán)限。那么不用指定bash路徑自然也好理解了啊。
linux shell腳本執(zhí)行方法四: 在當(dāng)前的shell環(huán)境中執(zhí)行bash shell腳本:
cd /data/shell
. hello.sh
或
cd /data/shell
source hello.sh
前三種方法執(zhí)行shell腳本時(shí)都是在當(dāng)前shell(稱為父shell)開啟一個(gè)子shell環(huán)境,此shell腳本就在這個(gè)子shell環(huán)境中執(zhí)行。shell腳本執(zhí)行完后子shell環(huán)境隨即關(guān)閉,然后又回到父shell中。而方法四則是在當(dāng)前shell中執(zhí)行的。