Bash心得整理(上)

Bash Script檔案的撰寫;在整個Linux作業系統操作中佔了很重要的一部份。可以在不會寫程式(C語言)的狀況下,利用內建指令及相關語法達到靈活自訂功能地使用作業系統。

雖然一開始入門較不容易,但熟練後卻能利用撰寫好的檔案來執行常用的操作,進而節省大量的時間與記憶需求,又能準確地完成工作。如此好處;花點時間學習何樂而不為呢?

上篇整理基本操作,下篇整理進階使用方法。

(一)Linux指令:Bash指令稿的撰寫以Linux的指令操作為基礎,茲提供相關連結方便使用時查詢。

(二)Vim操作指令:撰寫指令稿時使用的VIM編輯器;其指令要記熟,茲提供相關連結方使用時查詢。

(三)變數的使用:
   1.read/echo:讀取/顯示資訊內容(可搭參數使用)
   2.$0~9:傳入指令稿(函數)的參數,0=名字。
   3.$#:參數個數,$?:函數回傳值。
   4.$*:參數實際內容(單一物件),$@:同左(多個物件)。
   5.env:環境變數,使用$(大寫)可取其中的值來使用。
   6.export:設定,source:生效,unset:刪除。

(四)特殊符號:
   1.'':單引號內的內容都變成字串。
   2."":雙引號內的內容,除$、``、\等,其餘當字串。
   3.``:倒引號將指令執行結果輸出。
   4.*:比對任意字元,?:比對單一字元。
   5.a[d*f]b:比對字串範例,a[!d?f]b:同左(反向)。
   6.a[1-5]b:需連續字串,a{12,23,34}b:明確地比對。
   7.|:管線,將前一指令結果輸入到下一指令執行。
   8.&:後台執行指令或指令稿,不會影响當前效能。
   9.{}:字串中區別出變數,():和倒引號同,;:換行功能。 

(五)檔案處理:
   1.檔案類型:文字、二進制、目錄、連結、裝置、管線。
   2.STDIN=/dev/stdin/=0
   3.STDOUT=/dev/stdout/=1
   4.STDERR=/dev/stderr/=2
   5.<:輸入、>:輸出、>>:追加輸出。
   6.2>>err.list(範例1)、&>outerr.list(範例2)。

(六)分支結構:
   1.測試方式:test指令、[  ],true回0、false回1要注意。
   2.檔案測試參數:-[efdcpSL]、-[nt ot ef]、-[rwxugks]。
   3.數字測試參數:-[lt le ne eq ge gt]。
   4.字串測試參數:-[nz]、=、!=。
   5.邏輯測試參數:-[ao]、!。
   6.if的分支測試語法:
       if [ ]
       elif
       then
                 (expression)
       else
                 (expression)
       fi 
   7.case的分支測試語法:
       case 變數 in
       pattern1) command;;
       pattern2 | pattern3) command;;
       *) command;;
       esac
   8.select的分支測試語法:
       select 變數 in 變數清單(可用""括住空白)
       do 
             command
       done


(七)循環結構:
   1.for的循環結構語法:
       for 變數 in 變數清單(可用""括住空白)
       do
             command
       done
   2.while的循環結構語法:
       while [ ]
       do
             command
       done 
   3.until的循環結構語法:
       until [ ]
       do
             command
       done

(八)函數結構與陣列:
   1.函數型式:function fun{  }、fun(){  }共兩種。
   2.傳參數方式fun p1 p2 p3傳入,$1、$2、$3方式取出。
   3.$#:傳入參數個數,己去掉$0故不用減1。
   4.$?:函數回傳值,亦可使用return $val方式。
   5.$var='fun' 
   6.array的使用範例使用範例2使用範例3
   7.array的用法需參考範例,和書中例子有所不同。

(九)撰寫技巧:
   1.可使用type判斷指令,並儘量用原生指令。
   2.少用|管線,效能會變慢!可用time fun來測時間。
   3.少用sed、awk來操作字串,效能會變慢。
   4.可用let expression及(( ))來做四則運算。
   5.可用"expression" | bc來做浮點數及函數的進階運算。 

沒有留言:

張貼留言