演算法及shell指令碼編程基礎

來源:互聯網
上載者:User

標籤:演算法與或非   進階語言   shell指令碼代碼   

bash存在多命令執行的特性,例如:# COMMAND1 $(COMMAND2);還有進程之間的通訊(IPC):# COMMAND1 | COMMAND2…

一、命令執行結構與演算法

命令執行中,存在順序執行結構:分號分隔 # COMMAND1 ; COMMAND2 ; …。同時存在選擇執行結構:邏輯運算與、或、非、異或,其中最主要的為選擇執行結構,具體討論如下。

1、與:邏輯乘法 &&

狀態傳回值:0對應TRUE,1-255對應FALSE

具體演算法為:True &&true == true

            True && false == false

            False &&true == false

            False && false == false

與運算存在短路邏輯運算:只要第一個邏輯運算元為假,則其邏輯操作結果一定為假。例如COMMAND1 && COMMAND2,解釋為:如果COMMAND1能夠成功執行,則COMMAND2會被執行;如果COMMAND1能夠成功執行,則COMMAND2會被執行

2、或:邏輯加法 ||

具體演算法為:True || true == true

            True || false == true

            False || true == true

            False || false == false

或的短路邏輯運算:主要有一個邏輯運算元為true,則其邏輯運算結果一定為true。例如COMMAND1 || COMMAND2,解釋為:如果COMMAND1能夠成功執行,則COMMAND2就沒有必要執行;如果COMMAND1執行失敗,則COMMAND2不會被執行

3、非:邏輯取反  !  

具體演算法為: !COMMAND (!true = false、!false = true)

綜合以上三點,可以得到:

邏輯運算子優先順序: !> && > || 

 !COMMAND1 &&COMMAND2相當於 COMMAND1 ||COMMAND2,解釋為:如果COMMAND1能夠成功執行,則COMMAND2就沒有必要執行;如果COMMAND1執行失敗,則COMMAND2不會被執行 

 !COMMAND1 || COMMAND2相當於 COMMAND1 && COMMAND2,解釋為: 如果COMMAND1能夠成功執行,則COMMAND2會被執行;如果COMMAND1執行失敗,則COMMAND2不會被執行

 德摩根定律:!(A&&B)==!A||!B 

             !(A||B)==!A&&!B 

  德摩根定律的例子為:!(COMMAND1 &&COMMAND2)|| COMMAND3,解釋為:COMMAND1 與COMMAND2同時執行成功才執行COMMAND3

演算法或指令的實現形式:順序執行、選擇執行、迴圈執行

  4、異或

  比對兩個運算元是否不同。如果不同,則邏輯運算結果為真,如果相同,邏輯運算結果為假   


二、Shell指令碼編程

Shell指令碼編程的編程即編寫程式原始碼。為了能夠讓使用者在使用電腦的時候,能以非互動方式完成某些任務,所以我們需要把這些任務編製為一個檔案,讓電腦順序讀取,從而實現功能;Shell指令碼編程的動態編譯即調用庫檔案。

shell指令碼是根據使用者的需求解釋使用者問題的大量命令組合體,為純文字文檔;調用shell程式,其次調用需要的外部命令檔案,命令直譯器。 Shell指令碼編程為過程式程式設計語言,解釋運行,依賴於外部程式檔案運行 提供了單一功能的單程介面,過程式編程邏輯的支援。

很多命令都不具備“執行等冪性”,在shell指令碼中就需要使用大量的程式邏輯來判斷某個目命令是否滿足其運行條件,以避免在運行過程中出現嚴重錯誤

程式設計語言分為進階語言和低級語言,具體解釋如下。

1、進階語言

(1)、根據原始碼的處理方式分為:編譯運行語言、解釋運行語言

編譯運行語言具體過程為:原始碼----->編譯器(彙編)-----> [連接器(完成庫的連結行為)]------->可以直接執行的二進位檔案

解釋運行語言具體過程為:原始碼------->直接啟動跟原始碼對應的解譯器程式,由解譯器邊解釋邊執行

(2)、根據編程過程中功能的實現是調用庫還是調用外部程式分為:完整程式設計語言、指令碼程式設計語言

  完整程式設計語言具體為:利用庫或編程組件進行編程

  指令碼程式設計語言具體為:解譯器編程

(3)、根據程式的編寫範式分為:過程式程式設計語言、對象式程式設計語言

 過程式程式設計語言具體為:圍繞指令(演算法)的實現設計資料和資料結構,資料為指令服務

 對象式程式設計語言具體為:以資料(資料結構)為中心,將資料執行個體化為類,圍繞資料的需求來部署指令  類、屬性、方法

2、低級語言:組合語言。


Shell指令碼中的代碼內容有如下要求和解釋:

1、首行必須是shebang,解譯器路徑,必須佔據絕對行首;在執行時,啟動相應的解譯器以解釋指令碼內諸多的命令

例如:#!/bin/bash ;#!/bin/sh ;#!/usr/bin/python

2、在shell指令碼中,除了shebang之外,以#佔據絕對行首的內容,均為注釋行,解譯器會會忽略這樣行的內容

3、解釋會忽略指令碼中所有的空白行

4、大量的命令和關鍵字(if, else, then, do, while, for……)

注意:shell指令碼一旦運行,是在當前的shell中根據shebang的指示,開啟一個指標(子shell)解釋執行代碼內容,shell指令碼的內容是在一個子shell中實現的


指令碼的運行方法部分方法如下:

1、為文字檔賦予執行許可權,直接運行此檔案;如果在執行指令碼時,唯寫指令檔名不給出路徑的話,必須確保PATH變數中儲存的路徑下,能找到該文字檔

 例如:chmod +x /PATH/TO/SCRIPT_FILE

       ~]# /PATH/TO/SCRIPT_FILE

2、直接使用解譯器運行指令碼,將指令碼作為解譯器命令的參數

 例如:bash /PATH/TO/SCRIPT_FILE


演算法及shell指令碼編程基礎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.