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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。