shell程式設計入門

吃奶的牛發表於2016-09-19

一、準備

最好自己本地裝一臺虛擬機器,因為用阿里雲或者騰訊雲,無法檢視系統現有的指令碼。另外,需要有一定的Linux基礎,vi命令,檔案許可權這些肯定要知道的。

我這裡是用VMware裝的centos 6.5 64位的Linux系統。

二、shell介紹

Shell 是一個用 C 語言編寫的程式,它是使用者使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程式設計語言。Shell 是指一種應用程式,這個應用程式提供了一個介面,使用者通過這個介面訪問作業系統核心的服務。

Shell 程式設計跟 java、php 程式設計一樣,只要有一個能編寫程式碼的文字編輯器和一個能解釋執行的指令碼直譯器就可以了。這裡用的shell腳步是 Bash,也就是 Bourne Again Shell,由於易用和免費,Bash 在日常工作中被廣泛使用。同時,Bash 也是大多數Linux 系統預設的 Shell。

三 、shell變數(環境變數、預定義變數、自定義變數、位置變數)

執行shell時,會同時存在三種變數:

1) 區域性變數    區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。(自定義變數)

2) 環境變數  所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要的時候shell指令碼也可以定義環境變數。

3) shell變數  shell變數是由shell程式設定的特殊變數。shell變數中有一部分是環境變數,有一部分是區域性變數,這些變數保證了shell的正常執行(預定義變數  )

注: 環境變數跟Windows裡,設定JDK、maven那種一樣的環境變數。在Linux裡的/etc/profile裡面(root使用者的,其他使用者的在使用者目錄的profile裡面)。可以通過set命令檢視現在系統的環境變數,如下:

自定義變數,就跟java、JavaScript裡面設定的變數一樣。不夠shell不需要宣告,直接a=1,就算申明瞭一個變數,很是靈活。

變數名的命名須遵循如下規則:

                   命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。

                   中間不能有空格,可以使用下劃線(_)。

                  不能使用標點符號。

                  不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字)。

使用一個定義過的變數,只要在變數名前面加美元符號即可。$a,就能使用上面定義的變數a,使用的時候要保證它初始化了。最好在兩邊加上雙引號 “$a” 。

變數名外面的花括號是可選的,加不加都行,加花括號是為了幫助直譯器識別變數的邊界 推薦給所有變數加上花括號,這是個好的程式設計習慣。"${a}"

位置變數  $1-$9 

   如果你寫過原聲的jdbc ,sql裡面會用?暫時代替引數,然後通過preparement.set(1,XX),將引數設定進去。這裡的原理和它很像,也是先佔位。$1代表執行指令碼時,引數列表裡面的第一個引數。它可以在指令碼里多次出現,沒有前後順序要求。

預定義變數,是系統預留的一些變數。

四、資料型別

字串是shell程式設計中最常用最有用的資料型別(除了數字和字串,也沒啥其它型別好用了),字串可以用單引號,也可以用雙引號,也可以不用引號。

單引號字串的限制:
單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的
單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,作為字串拼接使用。


雙引號的優點:
雙引號裡可以有變數
雙引號裡可以出現轉義字元

獲取字串長度

string="abcd"
echo ${#string} #輸出 4

字串的擷取方法

 指令碼執行結果:

在 Shell 中,用括號來表示陣列,陣列元素用"空格"符號分割開。定義陣列的一般形式為:
陣列名=(值1 值2 ... 值n).
array_name=(value0 value1 value2 value3)

讀取陣列元素值的一般格式是: ${陣列名[下標]}
使用 @ 符號可以獲取陣列中的所有元素
echo ${array_name[@]}

獲取陣列長度的方法與獲取字串長度的方法相同
# 取得陣列元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得陣列單個元素的長度
lengthn=${#array_name[n]}

數值,運算與比較

計算表示式格式,共有三種方式。

1)雙小括號的方式:     $(( 表示式  ))       如:$(( $a + $b ))

2)中括號的方式:      $[ 表示式 ]             如:$[ $a + $b ]

3)expr命令的方式:    expr  表示式         如:expr   $a + $b

 執行結果

五、判斷語句

形式一 : test 表示式                      形式二 :[ 表示式 ]

最常使用  ------ 測試表示式和中括號之間,一定要有空格,才算判斷表示式是否成立

關係運算子

 邏輯運算子

&& 邏輯與           如: ls && cat
前後跟命令,沒有空格要求; 只有前面的命令執行成功了,才執行後面的命令

|| 邏輯或
和上面的相反; 只有前面的命令執行失敗了,才執行後面的命令

; 無邏輯關係,代表執行順序 (兩個命令寫在同一行,用分號隔開。不同行不需要加分號)
只有前面的命令執行完,才執行後面的命令。shell指令碼,每行的末尾是不需要跟;的,除非;後面還有命令

六、結構語句,迴圈,判斷

迴圈結構:

 

 

 

 

判斷結構:

 

 

 

 

 執行結果:

七、注意事項

1、shell指令碼執行順序: 從上往下,依次執行。反引號·(~這個按鍵上的引號)包含的內容預先執行

2、shell的庫,除了bash,還有如下:

3、shell裡可以自定義函式,並呼叫,這個例子在迴圈結構 for語句裡面有。自定義的函式可以多次呼叫

4、使用字串變數時,在判斷語句的中括號裡,推薦使用 [  "$a"  =  "$b"  ]  <=>  代替 [  $a   =   $b ] 。多加了雙引號

5、Linux系統自帶shell指令碼教材,都在 /etc/init.d/下面。多看多寫

《shell指令碼學習指南》-高清中文下載地址

相關文章