初識(shí)shell腳本

目前在做SDK方面的開發(fā),公司流程比較追求自動(dòng)化,追求效率,每發(fā)布版本提交到測(cè)試人員手中都力爭(zhēng)自動(dòng)化,一是避免人工打包出錯(cuò),二是方便快捷。利用shell腳本通過Jenkins平臺(tái)就可以實(shí)現(xiàn)這樣的便利。這一篇文是自己這幾天對(duì)shell的初步了解,此篇也是對(duì)自己踩的坑做個(gè)總結(jié)。

shell的基礎(chǔ)語法(部分):
{
命名一個(gè)變量
變量名="xxxxx"
坑:習(xí)慣性的在等號(hào)兩側(cè)各加一個(gè)空格,導(dǎo)致出現(xiàn)commond not found 的錯(cuò)誤,在shell中命名變量等號(hào)兩側(cè)切記不要留空格。
}

{
' ' 與`` 是不同的。
一開始看腳本的時(shí)候,由于把這兩個(gè)符號(hào)看成一樣的,導(dǎo)致看得比較懵逼。
' '單引號(hào)作用與""相似,有一些區(qū)別(自行g(shù)oogle),都是與字符串相關(guān)的。

而``表示執(zhí)行符號(hào)里邊的命令,有些命令存在返回值可以賦值給變量。
}

{
壓縮一個(gè)文件夾
推薦用以下方式:
cd "要壓縮的文件夾的路徑"
zip -r "包名.zip" ./*
}

{
腳本的函數(shù)一定要寫在調(diào)用此函數(shù)的前面,傳參很簡(jiǎn)單,跟在調(diào)用函數(shù)名后,函數(shù)實(shí)現(xiàn)中取參有點(diǎn)類似Swift中的一種方式,以下標(biāo)的方式取到參數(shù),個(gè)人覺得這個(gè)方式使腳本可讀性較差。

還是舉個(gè)栗子吧:



其中packageFramework(){xxxxxx},是定義的一個(gè)函數(shù),
定義里邊的$#表示這個(gè)函數(shù)接收到的參數(shù)的個(gè)數(shù),第一個(gè)if判斷-lt是指?jìng)€(gè)數(shù)是否小于1 ,lt其實(shí)是less than 的首字母縮寫(我猜的),$1指拿到第一個(gè)傳進(jìn)來的參數(shù)。
第二個(gè)if判斷中,-a表示 左右兩側(cè)的條件都成立才判斷才會(huì)為true,-a其實(shí)是and的縮寫(我猜的),也可以用很多語言中通用的 &&代替,左邊表示:傳進(jìn)的第一個(gè)參數(shù)不等于字符串debug,右邊表示:穿進(jìn)的第一個(gè)參數(shù)不等于字符串release。
packageFramework "xixixi" :此行為函數(shù)的調(diào)用,并傳入?yún)?shù) "xixixi"
下圖為運(yùn)行腳本的輸出:


腳本輸出

}

{
不百分百確定路徑的時(shí)候不要輕易嘗試運(yùn)行 sed -i命令
不百分百確定路徑的時(shí)候不要輕易嘗試運(yùn)行 sed -i命令
不百分百確定路徑的時(shí)候不要輕易嘗試運(yùn)行 sed -i命令

這個(gè)命令會(huì)修改文件,一旦路徑不正確修改了系統(tǒng)的文件或者你的工程文件,這個(gè)坑會(huì)有點(diǎn)難填。
}

要讀懂一份shell腳本還需要查閱一些命令行大全,常用的以grep,sed這些命令開頭的語句google之后都會(huì)有很全的介紹,個(gè)人認(rèn)為用到的時(shí)候再去查詢意思就好了。
PS:我編輯shell script所使用的編輯器為 CodeRunder,這個(gè)軟件對(duì)很多語言都適用,想要調(diào)試一段代碼塊的時(shí)候很方便。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容