chapter 11. 構(gòu)建基本腳本

創(chuàng)建shell腳本

  • shell腳本第一行為指定具體shell來(lái)運(yùn)行該腳本萌狂,可以指定shell(待驗(yàn)證)

echo

  • 使用echo輸出時(shí)啄骇,可以使用-n參數(shù)來(lái)不進(jìn)行換行,例如

      echo "Today is :"
      date
    

環(huán)境變量

  • 可以使用set命令查看全部環(huán)境變量
  • 可以使用$查看具體環(huán)境變量灸促,通過(guò)echo $evnName异旧,如果要使用echo輸出$符號(hào),可以使用轉(zhuǎn)義符echo \$佣谐,通扯抢簦可以使用${varName}來(lái)代替$varName,多增加的兩個(gè)花括號(hào)用來(lái)幫助識(shí)別后面的變量名

用戶變量

  • 用戶變量長(zhǎng)度最大為20個(gè)字符
  • 能夠區(qū)分大小寫(xiě)
  • 變量賦值時(shí)不能在=與變量中間存在空格狭魂,即varA="var a"
  • 命令替換罚攀,即將命令輸出賦值給變量(是執(zhí)行完后將結(jié)果賦值給變量)党觅,通常可用:
    • `反引號(hào)
    • $() 格式

輸入斋泄、輸出重定向

  • 輸出重定向分為:>覆蓋寫(xiě)杯瞻;>>追加寫(xiě)

  • 輸入重定向分為:<從文件讀取炫掐;<<內(nèi)聯(lián)輸入重定向

  • 內(nèi)聯(lián)輸入重定向需要指定文本標(biāo)記(marker)來(lái)確定開(kāi)始與結(jié)束魁莉, marker可以任意指定,習(xí)慣性使用EOF:

      ./test.sh << marker
      ...
      marker
    

管道—— |

ls -lrt | wc -l
  • 通過(guò)管道將輸出傳給后面的命令募胃,不會(huì)用到任何中間文件與緩沖區(qū)

數(shù)學(xué)運(yùn)算

expr命令

varTest=$(expr $var1 / $var2)
  • 能夠識(shí)別少量的數(shù)字和字符串操作符旗唁,包括:

      ARG1 | ARG2 如果ARG1既不是null也不是零值,返回ARG1痹束,否則返回ARG2
      ARG1 & ARG2 如果沒(méi)有參數(shù)是null或零值检疫,返回ARG1,否則返回0
      加祷嘶、減屎媳、乘、除论巍、取余烛谊、比較
      模式匹配
      截取字符串
      查找字符
     ……
    
  • 對(duì)于*乘要轉(zhuǎn)義為\*,否則會(huì)作為通配符處理

  • 運(yùn)算結(jié)果賦值給變量要通過(guò)$()或者``

數(shù)學(xué)運(yùn)算符——方括號(hào)[]

varTest=$[$var1 * $var2]
  • 只能進(jìn)行整數(shù)運(yùn)算
  • bash shell中使用$[]可以進(jìn)行數(shù)學(xué)運(yùn)算并將結(jié)果賦值給變量

浮點(diǎn)數(shù)運(yùn)算——bc

scale=4
bc 12.73 / 16
  • 浮點(diǎn)運(yùn)算精確度由內(nèi)建變量scale控制的环壤,若未設(shè)定則無(wú)法得到期望結(jié)果
  • 在bash shell中使用:
    • 簡(jiǎn)單計(jì)算晒来,使用管道+命令替換:

        varTest=$(echo "scale=4; 12.73 / 16" | bc)
      
    • 復(fù)雜計(jì)算,多個(gè)計(jì)算式郑现,使用內(nèi)聯(lián)輸入重定向:

        t1=12.73
        t2=16
        vartTest=$(bc << EOF
        scale=4
        var1=(12.1*2.1)
        var2=($t1 / $t2)
        var1 + var2
        E0F
        )
      

退出腳本
shell命令退出時(shí)會(huì)返回退出狀態(tài)碼(exit status),默認(rèn)情況下荧降,shell腳本會(huì)以腳本中最后一個(gè)命令的退出狀態(tài)碼退出

  • 查看退出狀態(tài)碼:$?
  • 成功結(jié)束狀態(tài)碼為0接箫,有錯(cuò)誤時(shí)狀態(tài)為正數(shù)值,其中:
    • 無(wú)效命令(command not found)會(huì)返回的退出狀態(tài)碼為127
    • 用戶沒(méi)有執(zhí)行命令的正確權(quán)限會(huì)返回126
    • 給某個(gè)命令提供了無(wú)效參數(shù)會(huì)返回1朵诫,1代表發(fā)生了一般性未知錯(cuò)誤

自定義退出狀態(tài)碼——exit
由于退出狀態(tài)碼為[0, 255]辛友,自定義的退出狀態(tài)碼會(huì)進(jìn)行模運(yùn)算除以256取余,例如:

exit 300

通過(guò)$?得到的退出狀態(tài)碼為44

參考文章

Linux Command Line and Shell Scripting Bible
該系列其他文章請(qǐng)查看:
Linux命令行與shell腳本

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剪返,一起剝皮案震驚了整個(gè)濱河市废累,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脱盲,老刑警劉巖邑滨,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钱反,居然都是意外死亡掖看,警方通過(guò)查閱死者的電腦和手機(jī)匣距,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哎壳,“玉大人毅待,你說(shuō)我怎么就攤上這事」殚牛” “怎么了尸红?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)刹泄。 經(jīng)常有香客問(wèn)我驶乾,道長(zhǎng),這世上最難降的妖魔是什么循签? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任级乐,我火速辦了婚禮,結(jié)果婚禮上县匠,老公的妹妹穿的比我還像新娘风科。我一直安慰自己,他們只是感情好乞旦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布贼穆。 她就那樣靜靜地躺著,像睡著了一般兰粉。 火紅的嫁衣襯著肌膚如雪故痊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天玖姑,我揣著相機(jī)與錄音愕秫,去河邊找鬼。 笑死焰络,一個(gè)胖子當(dāng)著我的面吹牛戴甩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闪彼,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼甜孤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了畏腕?” 一聲冷哼從身側(cè)響起缴川,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎描馅,沒(méi)想到半個(gè)月后把夸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡流昏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年扎即,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吞获。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谚鄙,死狀恐怖各拷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闷营,我是刑警寧澤烤黍,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站傻盟,受9級(jí)特大地震影響速蕊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娘赴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一规哲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诽表,春花似錦唉锌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至泛啸,卻和暖如春绿语,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背候址。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工吕粹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宗雇。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓昂芜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赔蒲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 內(nèi)容使用多個(gè)命令創(chuàng)建腳本文件顯示消息使用變量輸入輸出重定向管道數(shù)學(xué)運(yùn)算退出腳本 使用多個(gè)命令 如果多個(gè)命令一起使用...
    王詩(shī)翔閱讀 1,976評(píng)論 0 15
  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,096評(píng)論 0 0
  • 個(gè)人學(xué)習(xí)批處理的初衷來(lái)源于實(shí)際工作良漱;在某個(gè)迭代版本有個(gè)BS(安卓手游模擬器)大需求舞虱,從而在測(cè)試過(guò)程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,718評(píng)論 0 11
  • 一直希望成為一個(gè)美好的人,偶然發(fā)覺(jué)母市,指下的文字依舊彌漫著灰暗與悲想矾兜,哀鳴著奔向希望,又戛然而止患久,臥步己心椅寺。如此可見(jiàn)...
    枟辰閱讀 256評(píng)論 0 0
  • New logo 創(chuàng)作你的創(chuàng)作 免費(fèi)下載 ??Eva每日一善?? 180 Sarah鐘 簡(jiǎn)書(shū)作者 2017.11....
    Eva肖閱讀 113評(píng)論 0 0