項(xiàng)目中比較常用的shell腳本命令
? ? shell命令執(zhí)行有兩種執(zhí)行方式:一種是,用戶(hù)輸入一條命令只怎,shell就解釋執(zhí)行一條,這種方式被稱(chēng)為交互式怜俐;另一種是身堡,用戶(hù)事先寫(xiě)好一個(gè) shell腳本,其中會(huì)有多條命令拍鲤,讓shell一次把這些命令執(zhí)行完贴谎,而不用一條一條的執(zhí)行命令汞扎,這種方式被稱(chēng)為批處理。
? ? 常見(jiàn)的交互式方式有:cd? ..? ?或 pwd? 等擅这;常見(jiàn)的批處理方式澈魄,我們需要寫(xiě)一個(gè)shell腳本,例如test.sh仲翎。下面我們主要介紹我們項(xiàng)目中需要用到的shell腳本的基本命令及其語(yǔ)法痹扇。
編寫(xiě)一個(gè)簡(jiǎn)單的test.sh腳本:
在shell腳本中用#表示注釋?zhuān)喈?dāng)于Java中的//注釋?zhuān)侨绻?位于第一行開(kāi)頭,并且是#溯香!時(shí)則例外鲫构,它表示的是該腳本使用后面的編譯器/bin/sh解釋執(zhí)行的,第二行表示插入test用戶(hù)下的環(huán)境變量玫坛。在寫(xiě)好的shell腳本之后结笨,我們需要給這個(gè)腳本添加可執(zhí)行權(quán)限:在Linux可視化窗口執(zhí)行chmod +x? test.sh,然后這個(gè)test.sh這個(gè)腳本就可以了,如 sh? test.sh? 或? ./test.sh昂秃。
shell腳本的基本語(yǔ)法:
變量:Shell變量通常由字母加下劃線開(kāi)頭禀梳,由任意長(zhǎng)度的字母、數(shù)字肠骆、下劃線組成算途。例如my_name="csp",這里需要注意的是,等號(hào)的兩邊一定不能有空格號(hào)蚀腿。
命令代換:由“`”反引號(hào)括起來(lái)的也是一條命令嘴瓤,Shell先執(zhí)行該命令,然后將該命令執(zhí)行結(jié)果立刻代換到當(dāng)前命令行中莉钙。例如執(zhí)行一個(gè)當(dāng)前目錄的代換到變量path_dir中:path_dir=`pwd`,則shell會(huì)先執(zhí)行pwd這個(gè)命令廓脆,將pwd命令的結(jié)果賦值給變量path_dir。
上述腳本中磁玉,就是將test數(shù)據(jù)庫(kù)中的信息查詢(xún)結(jié)果代換給b這個(gè)變量停忿。注意圖中用的read? -p 命令是表示等待用戶(hù)輸入一個(gè)變量transDate的值。這里我們?cè)俳榻B一種自動(dòng)賦值的變量方式蚊伞,而對(duì)這種方式的腳本執(zhí)行時(shí)席赂,一開(kāi)始就需要進(jìn)行賦值,腳本編寫(xiě)如下:
執(zhí)行上述腳本時(shí)时迫,命令需要 ./test.sh? 20190616,這里的20190616就會(huì)自動(dòng)賦值給${1}颅停。
條件分支:
與C語(yǔ)言類(lèi)似,在Shell中用if掠拳、then癞揉、elif、else、fi這幾條命令實(shí)現(xiàn)分支控制喊熟。這種流程控制語(yǔ)句本質(zhì)上也是由若干條Shell命令組成的柏肪,這里我們需要注意到的是如果兩條命令寫(xiě)在同一行則序號(hào)用(;)分號(hào)隔開(kāi)逊移,如果一行只寫(xiě)一條命令就不需要寫(xiě)分號(hào)了预吆;另外then后面有換行,但是這條命令沒(méi)寫(xiě)完胳泉,shell會(huì)自動(dòng)續(xù)行,把下一行的命令當(dāng)成一條命令進(jìn)行處理岩遗,在if命令的參數(shù)里扇商,執(zhí)行結(jié)果為0表示真,執(zhí)行結(jié)果非0表示假宿礁。例如:
循環(huán):
Shell腳本的for循環(huán)結(jié)構(gòu)類(lèi)似于某些java語(yǔ)言的foreach循環(huán)(迭代器)案铺,例如
圖中,還用到了另一個(gè)命令 break梆靖,這個(gè)命令表示跳出循環(huán)控汉。其中 break n,表示可以指定跳出幾層循環(huán)。說(shuō)到break時(shí)返吻,在shell還有一個(gè)命令continue表示跳過(guò)姑子,而同樣continue有命令 continue? n 表示跳過(guò)幾層循環(huán)。
while的用法和C語(yǔ)言類(lèi)似测僵,例如: