溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

算法及shell腳本編程基礎(chǔ)

發(fā)布時間:2020-08-06 15:44:51 來源:網(wǎng)絡(luò) 閱讀:426 作者:little_ding 欄目:開發(fā)技術(shù)

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

一、命令執(zhí)行結(jié)構(gòu)與算法

命令執(zhí)行中,存在順序執(zhí)行結(jié)構(gòu):分號分隔 # COMMAND1 ; COMMAND2 ; …。同時存在選擇執(zhí)行結(jié)構(gòu):邏輯運(yùn)算與、或、非、異或,其中最主要的為選擇執(zhí)行結(jié)構(gòu),具體討論如下。

1、與:邏輯乘法 &&

狀態(tài)返回值:0對應(yīng)TRUE,1-255對應(yīng)FALSE

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

            True && false == false

            False &&true == false

            False && false == false

與運(yùn)算存在短路邏輯運(yùn)算:只要第一個邏輯操作數(shù)為假,則其邏輯操作結(jié)果一定為假。例如COMMAND1 && COMMAND2,解釋為:如果COMMAND1能夠成功執(zhí)行,則COMMAND2會被執(zhí)行;如果COMMAND1能夠成功執(zhí)行,則COMMAND2會被執(zhí)行

2、或:邏輯加法 ||

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

            True || false == true

            False || true == true

            False || false == false

或的短路邏輯運(yùn)算:主要有一個邏輯操作數(shù)為true,則其邏輯運(yùn)算結(jié)果一定為true。例如COMMAND1 || COMMAND2,解釋為:如果COMMAND1能夠成功執(zhí)行,則COMMAND2就沒有必要執(zhí)行;如果COMMAND1執(zhí)行失敗,則COMMAND2不會被執(zhí)行

3、非:邏輯取反  !  

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

綜合以上三點(diǎn),可以得到:

邏輯運(yùn)算符優(yōu)先級: !> && > || 

 !COMMAND1 &&COMMAND2相當(dāng)于 COMMAND1 ||COMMAND2,解釋為:如果COMMAND1能夠成功執(zhí)行,則COMMAND2就沒有必要執(zhí)行;如果COMMAND1執(zhí)行失敗,則COMMAND2不會被執(zhí)行 

 !COMMAND1 || COMMAND2相當(dāng)于 COMMAND1 && COMMAND2,解釋為: 如果COMMAND1能夠成功執(zhí)行,則COMMAND2會被執(zhí)行;如果COMMAND1執(zhí)行失敗,則COMMAND2不會被執(zhí)行

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

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

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

算法或指令的實(shí)現(xiàn)形式:順序執(zhí)行、選擇執(zhí)行、循環(huán)執(zhí)行

  4、異或

  比對兩個操作數(shù)是否不同。如果不同,則邏輯運(yùn)算結(jié)果為真,如果相同,邏輯運(yùn)算結(jié)果為假   


二、Shell腳本編程

Shell腳本編程的編程即編寫程序源代碼。為了能夠讓用戶在使用計算機(jī)的時候,能以非交互式的方式完成某些任務(wù),所以我們需要把這些任務(wù)編制為一個文件,讓計算機(jī)順序讀取,從而實(shí)現(xiàn)功能;Shell腳本編程的動態(tài)編譯即調(diào)用庫文件。

shell腳本是根據(jù)用戶的需求解釋用戶問題的大量命令組合體,為純文本文檔;調(diào)用shell程序,其次調(diào)用需要的外部命令文件,命令解釋器。 Shell腳本編程為過程式編程語言,解釋運(yùn)行,依賴于外部程序文件運(yùn)行 提供了單一功能的單程接口,過程式編程邏輯的支持。

很多命令都不具備“執(zhí)行冪等性”,在shell腳本中就需要使用大量的程序邏輯來判斷某個目命令是否滿足其運(yùn)行條件,以避免在運(yùn)行過程中出現(xiàn)嚴(yán)重錯誤

編程語言分為高級語言和低級語言,具體解釋如下。

1、高級語言

(1)、根據(jù)源代碼的處理方式分為:編譯運(yùn)行語言、解釋運(yùn)行語言

編譯運(yùn)行語言具體過程為:源代碼----->編譯器(匯編)-----> [連接器(完成庫的鏈接行為)]------->可以直接執(zhí)行的二進(jìn)制文件

解釋運(yùn)行語言具體過程為:源代碼------->直接啟動跟源代碼對應(yīng)的解釋器程序,由解釋器邊解釋邊執(zhí)行

(2)、根據(jù)編程過程中功能的實(shí)現(xiàn)是調(diào)用庫還是調(diào)用外部程序分為:完整編程語言、腳本編程語言

  完整編程語言具體為:利用庫或編程組件進(jìn)行編程

  腳本編程語言具體為:解釋器編程

(3)、根據(jù)程序的編寫范式分為:過程式編程語言、對象式編程語言

 過程式編程語言具體為:圍繞指令(算法)的實(shí)現(xiàn)設(shè)計數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)為指令服務(wù)

 對象式編程語言具體為:以數(shù)據(jù)(數(shù)據(jù)結(jié)構(gòu))為中心,將數(shù)據(jù)實(shí)例化為類,圍繞數(shù)據(jù)的需求來部署指令  類、屬性、方法

2、低級語言:匯編語言。


Shell腳本中的代碼內(nèi)容有如下要求和解釋:

1、首行必須是shebang,解釋器路徑,必須占據(jù)絕對行首;在執(zhí)行時,啟動相應(yīng)的解釋器以解釋腳本內(nèi)諸多的命令

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

2、在shell腳本中,除了shebang之外,以#占據(jù)絕對行首的內(nèi)容,均為注釋行,解釋器會會忽略這樣行的內(nèi)容

3、解釋會忽略腳本中所有的空白行

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

注意:shell腳本一旦運(yùn)行,是在當(dāng)前的shell中根據(jù)shebang的指示,開啟一個指示器(子shell)解釋執(zhí)行代碼內(nèi)容,shell腳本的內(nèi)容是在一個子shell中實(shí)現(xiàn)的


腳本的運(yùn)行方法部分方法如下:

1、為文本文件賦予執(zhí)行權(quán)限,直接運(yùn)行此文件;如果在執(zhí)行腳本時,只寫腳本文件名不給出路徑的話,必須確保PATH變量中保存的路徑下,能找到該文本文件

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

       ~]# /PATH/TO/SCRIPT_FILE

2、直接使用解釋器運(yùn)行腳本,將腳本作為解釋器命令的參數(shù)

 例如:bash /PATH/TO/SCRIPT_FILE


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI