Shell是一個用C語言編寫的程序它是用戶使用Linux的橋樑。Shell既是一種命令語言,又是程序設計語言。Shell是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。Windows Explorer是一個典型的圖形界面Shell。
1.Shell腳本
Shell腳本(shell script)是一種爲shell編寫的腳本程序。業界所說的shell通常都是指shell腳本,但大家要知道,shell和 shell script是兩個不同的概念。由於習慣,此處所指“shell編程”一律指shell腳本編程,不是指開發shell本身。
2.Shell環境
Shell編程跟java、php編程一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以。
Linux的Shell種類很多,常見的有:
- Bourne Shell (/usr/bin/sh 或 /bin/sh)
- C Shell (/usr/bin/csh)
- K Shell (/usr/bin/ksh)
- Shell for Root (/sbin/sh)
……….
此處使用的是Bash 即 Bourne Again Shell ,由於易用和免費,Bash在日常工作中被廣泛使用。同時,Bash也是大多數Linux系統默認的Shell。
在一般情況下,人們並不區分Bourne Again Shell和Bourne Shell,所以,#!/bin/sh,同樣也可以改爲#!/bin/bash
其中:#! 告訴系統其後路徑所指定的程序即是解釋此腳本文件的Shell程序。
3.第一個shell腳本
打開文本編輯器(可以使用vi/vim命令創建文件),新建一個文件test.sh 擴展名爲sh代表shell,不過擴展名並不影響腳本執行,只是爲了見名知意。
在text目錄下創建test1.sh文件、回車 進入vim編輯器、按i 進入進入輸入模式。輸入代碼:
注:“#!”是一個約定標記,目的是告訴系統這個腳本需要什麼解釋器來執行,即使用哪一種Shell。echo命令用於向窗口輸入文本。
4.運行shell腳本的兩種方法
(1)作爲可執行程序
#使腳本具有執行權限
#執行腳本
注:一定要寫成./test1.sh,而不是test1.sh,運行其它二進制的程序也一樣,直接寫test1.sh,Linux系統會去PATH裏尋找有沒有叫test1.sh的可執行文件,但是隻要/bin,/sbin,/usr/bin,/usr/sbin等在PATH裏,而現在所使用的當前目錄通常都不再PATH裏,所以寫成test1.sh會找不到命令!所以要用./test1.sh告訴系統,就在當前目錄裏面尋找。
(2)作爲解釋器參數
這種運行方式是,直接運行解釋器,其參數就是shell腳本的文件名。
這種方式運行腳本,不需要在第一行指定解釋器信息。
即,文件中不需要再寫#!/bin/sh 文件內容爲:
5.Shell
shell變量:
定義變量時,變量名不加美元符號“$”,變量名和等號之間不能有空格。
變量名的命名需要遵循的規則:
- 首字符必須爲字母;
- 中間不能有空格,可以使用下劃線;
- 不能使用標點符號
- 不能使用bash裏的關鍵字
例:
#定義變量
#使用變量 在變量前加$符即可。
注:變量名外的花括號是爲了幫助解釋器識別變量邊界。(可寫可不寫)
字符串:
可以用單引號,也可以使用雙引號。
單引號
單引號字符串限制:
- 單引號裏的任何字符都會原樣輸出,單引號字符串中的變量時無效的;
- 單引號中不能出現單引號,使用轉義字符也不行。
雙引號
#編輯
#執行
雙引號優點:
- 雙引號裏可以有變量;
- 雙引號裏可以出現轉義字符。
字符串拼接:
#編輯
#執行
數組:
bash支持一維數組(不支持多維數組) 且沒有限制數組的大小。
數組元素的下標由0開始編號。
定義數組:
數組名=(值1 值2…….值n)
例如:
#讀取數組元素和獲取數組所有元素
#執行結果
獲取數組長度:
#執行結果
Shell註釋:
以“#”開頭就是註釋,會被解釋器忽略。Sh中沒有多行註釋,只能每行加一個#