shell介紹css
既然說到bash編程,那就先從程序設計開始吧,先說什麼是程序?我的的話解釋:程序就是對數據的加工處理過程。那麼,程序設計構成就能夠寫成這個等式:程序=數據結構+指令算法。程序員
數據結構:即非數值計算的程序設計問題中的計算機的操做對象以及它們之間的關係和操做 指令算法:即對特定問題求解步驟的一種描述,是對指令的有序序列
程序根據在編程過程當中對數據和指令的側重點不一樣,能夠將程序分爲兩種類型:算法
一、面向過程的編程:以指令爲中心,設計算法,數據服務於算法; 二、面向對象的編程:以數據爲中心,設計數據結構(類),程序服務於數據結構;
根據編程命令集,接口以及程序運行過程,將程序語言分類爲:shell
一、彙編語言:彙編語言的實質和機器語言是相同的,都是直接對硬件操做 二、腳本語言:腳本語言是解釋運行而非編譯 三、機器語言:所有機器指令的集合構成計算機的機器語言,是用二進制代碼0和1描述的指令 四、高級語言:高級語言所編制的程序不能直接被計算機識別,必須通過轉換才能被執行
系統編程寫的程序源碼是沒法被內核直接運行的,須要對程序源碼進行編譯或解釋成機器語言。再經過系統內核去運行程序。兩種方式:編程
一、編譯執行 步驟:須要編譯器,彙編器等來事先將源碼編譯彙編生成可運行的二進制代碼程序文件。 二、解釋執行 步驟:由解釋器全程參與,解釋器每次讀取一行,運行一行。
對編程的定義和分類有了初步瞭解,將shell編程對號入座。知道shell屬於腳本語言,運行方式是解釋執行,就會很容易理解shell編程的運行過程和原理了。windows
shell定義bash
英文shell區別於kernel,是用來人機交互的一類交互式程序。計算機最初的編程須要程序員根據硬件廠商提供的機器碼來編寫程序(即彙編),而每一個硬件廠商的硬件架構和機器碼都是不一樣的。這就形成程序編寫的重複性和複雜性,爲了解決這個問題,kernel應運而生,kernel的做用就是爲不一樣的硬件廠商提供一個統一的對外接口規則,其實就是操做系統。同一個操做系統不就是可以跑在不一樣硬件廠商的電腦上?而後,用戶對操做系統的操做都是統一的操做集。想一想,是否是這麼回事!好了,明白kernel了,那用戶操做電腦,仍是須要人機交互,而shell就是爲解決人機交互而產生的一種接口程序,它是工做在kernel的基礎之上的。數據結構
廣義上,人機交互分爲圖形和命令行兩種接口類型。即shell交互接口程序也是分爲GUI和CLI兩種類型的,就像windows的桌面和dos。GUI顧名思義,就是基於圖形的操做方式;CLI則是提供一個命令提示符,在提示符上鍵入運行須要的命令來達到人機交互的目的。Linux系統的shell做爲操做系統的外殼,爲用戶提供使用操做系統的接口。他是命令語言、命令解釋程式及程式設計語言的統稱。Linux下的shell做用就是:架構
一、它是用戶操做系統內核,用戶與內核交互操做的接口,接收用戶的操做命令; 二、它是命令解釋器,它擁有本身內建的shell命令集,shell也能被系統中其餘應用程序所調用。用戶在提示符下輸入的命令都由shell先解釋而後傳給Linux核心 三、是一個解釋型的程序設計語言
當普通用戶成功登陸,系統將執行一個稱爲shell的程序。正是shell進程提供了命令行提示符。做爲默認值(TurboLinux系統默認的shell是BASH),對普通用戶用「$」做提示符,對超級用戶(root)用「#」做提示符。一旦出現了shell提示符,就能夠鍵入命令名稱及命令所須要的參數。shell將執行這些命令。ide
shell命令分類:
內部命令:shell本身內建的shell命令集 外部命令:是存在於文件系統中某個目錄下的單獨的程序
shell工做原理:
shell首先檢查命令是不是內部命令,若不是再檢查是不是一個應用程序,即外部命令。而後shell在搜索路徑裏尋找這些應用程序(搜索路徑就是由系統環境變量定義的一個能找到可執行程序的目錄列表,如PATH)。若是鍵入的命令不是一個內部命令而且在路徑裏沒有找到這個可執行文件,將會顯示一條錯誤信息。若是可以成功找到命令,該內部命令或應用程序將被分解爲系統調用並傳給Linux內核。如圖:
說完什麼是編程,以及shell和shell的工做原理。下面進入bash編程的正題。哦,在這以前先說下bash腳本的一些特性或者說是一些比較零散瑣碎的知識點。
1、腳本的編寫,運行
首行頂格#!/path/to/shell_file 聲明選擇使用那種shell 運行須要一個執行權限,而執行: ./shell_script或者/path/to/shell_file shell_script 註釋行:#
2、命令狀態結果,bash進程可追蹤執行命令成功與否的狀態
0:成功 1-255:失敗 $?:顯示緊臨上次命令行的執行結果
3、bash經常使用選項
-n:檢查腳本中的語法錯誤,只能是語法錯誤 -x:調試執行腳本
4、特殊設備:
/dev/null: 空,bit buckets,吞下全部數據,並直接丟棄; /dev/zero:吐出一堆0;
OK,先總結這些,有新發現之後再加。