【Linux從零開始】:6.學習Bash與Shell Script(1)


  過了2周,終於學到shell cripte的編寫了,回頭看看鳥哥的菜已經吃完一半,還是略有成就感的,不過想想自己學了些什么,不知為什么也列舉不出來太多。不管怎么說,現在Linux也算從零走到入門了吧,之后打算好好研究下Linux內核和Linux C編程,搞幾個小項目深入下,有需要再看看系統管理什么的。廢話不多說了,把今天看shell script的筆記整理出來吧。

   編寫shell script的良好習慣                          

   1.文件頭處記錄   

  1.script的功能;

  2.script的版本;

  3.script的作者與聯絡方式;

  4.script的歷史記錄;

  5.script內較特殊的命令,最好使用“絕對路徑”的方式來執行;

  6.script執行時需要的環境變量預先生命與設置。

  同時,根其他編碼一樣,添加適當的注釋,整齊的縮進排版都是很重要的。

   2.簡單的范例:   

  從Hello World開始~


  第一行:#!聲明你所使用的shell名稱:這個還是比較重要的,這樣系統就能夠加載bash的相關環境配置文件(一般來說就是non-login shell的~/.bashrc)

  #作為注釋的前綴,自我覺得這注釋的顏色挺好看的哈。

  在程序的開頭,最好對主要的環境變量進行聲明,比如PATH和LANG等是比較重要的2個,方便程序直接執行命令,而不必寫絕對路徑。


   shell中的變量                           

   1.變量的顯示與設置:   

  echo $LANG 顯示各種變量  

  1.使用等號對變量進行賦值:

  EG:name=abc  自定義變量  echo $name  輸出結果:abc

  2.等號右邊不能直接根空格符,且變量名稱必須是英文字符與數字,不能數字開頭(都比較基本啦)

  3.變量內容若又空格等字符可使用雙引號“”,單引號''將變量內容結合起來:

  A.雙引號中的特殊字符如$等,可以保有原本的特性:

    eg:name= "$name its me"  輸出變量原來的值     echo $name 輸出結果:abc its me

  B.單引號內的特殊字符作為一般文本字符原樣輸出:

    eg:name= ' $name its me'  原樣輸出'  '中的內容   echo $name 輸出結果: $name its me

  4.可以使用 \ 將特殊字符轉換為普通字符([Enter] $ \ 空格 !等)

  5. 增加變量內容:(讀取變量值)

    eg:  name="$name"yes或者 name=${name}yes (推薦) echo $name  輸出結果:abcyes

  6.若要在等號右邊調用命令輸出:

    eg:  version = $(命令名稱)   version=$( uname -r )

  7.若需要在其他子進程中也是使用該變量,需要使用export將該變量聲明為環境變量

  8.通常大寫字符為系統默認變量。

  9.取消變量的方法: unset 變量名稱  unset name

   2.環境變量的功能:   

  列出目前shell環境下的所有環境變量與其內容: env

  列出所有的變量(環境變量與自定義變量):set

  $(關於本shell的PID) 使用echo $就可以獲得本線程的PID號碼

  ?(關於上個執行命令的回傳碼)如果成功執行,回傳0;如果執行發生錯誤,會回傳“錯誤代碼”

  將自定義變量聲明為環境變量:export 變量名稱

    影響現實結果的語系變量:

    locale (本機目前設置)locale -a (系統所支持的全部語系)

   3.變量鍵盤讀取,數組與聲明:   

  1.鍵盤讀取:read [-pt] variable;

    -p:寧可以接提示符   eg: read -p "Please input your name" name;

    -t:接等待的秒數  eg: read -t 30 name。

  2.變量的聲明: declare [-aixr] variable

    -a:將后面變量聲明為數組類型;

    -i:將變量聲明為整型;

    -x:將變量聲明為環境變量;

    -r:將變量聲明為readonly類型,該變量不可悲更改內容,也不能重設。

    變量類型默認為字符串;如果不小心把變量聲明為只讀,必須注銷才登陸才能復原。

  3.數組的聲明: var[index]=content

    eg:var[1]="small min"

         var[2]="big min"

       var[3]="nice min"

       echo "${var[1]}, ${var[2]}, ${var[3]}"

   4.變量內容的刪除,替代和替換      

變量設置方式 說  明
${變量#關鍵字} 若變量內容從頭開始的數據符合“關鍵字”,則將符合的最短數據刪除 (刪除第一個)
${變量##關鍵字} 若變量內容從頭開始的數據符合“關鍵字”,則將符合的最長數據刪除(剩下最后1個)
${變量%關鍵字} 從尾向前的數據符合“關鍵字”,則將符合的最短數據刪除(刪除第一個)
${變量%關鍵字} 從尾向前的數據符合“關鍵字”,則將符合的最長數據刪除(剩下最前面的一個)
${變量/舊字符串/新字符串} 變量內容符合舊字符串,第一個舊字符串替換為新字符串
${變量//就字符串/新字符串} 變量內容符合就字符串,所有的都替換為新字符串

 

                        變量的測試與替換方式

變量設置方式 str沒有設置 str為空字符串 str為非空字符串
var=${str-haha} var=haha var= var=$str
var=${str:-haha} var=haha var=haha var=$str
var=${str+haha} var= var=haha var=haha
var=${str:+haha} var= var= var=haha
var=${str=haha} var=str=haha var=str= str不變 var=$str
var=${str:=haha} var=str=haha var=str=haha str不變 var=$str
var=${str?haha} error var= var=$str
var=${str:?haha} error error var=$str

 

   5.命令別名與歷史命令   

  命令別名設置:alias, unalias(很簡單) 

  eg: alias name='wolegequ'      alias c='cal'

  歷史命令: history [n] [-c] [-raw] histfiles

    n:列出最近的n條命令

    -c:清楚目前shell中的所有內容

    -a:將新增命令加入histfiles,若沒有該文件,默認寫入~/.bash_history

    -r: read  -w:write

  echo $HISTSIZE 顯示history的大小

  !!執行上一條命令,!number 執行第幾條命令

  #:最終命令寫入histfile的問題,只有最后注銷的那個bash才回寫入~/.bash_history

  

 

知識共享許可協議
本作品由vortex.zhu創作

采用知識共享署名-非商業性使用-禁止演繹 2.5 中國大陸許可協議進行許可。
基於www.cnblogs.com上的作品創作。
Permissions beyond the scope of this license may be available at http://www.cnblogs.com/VortexPiggy/.


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM