在了解shell編程基礎前先看一下bash中的邏輯運算
bash的特性之多命令執行
COMMAND;COMMAND1...順序執行結構
選擇執行結構:
邏輯運算:
與:邏輯乘法,&&(相當于物理電路中的串聯)
0:成功執行-->true
1~255失敗-->false
t&&t-->t
t&&f-->f
f&&f-->f
f&&t-->f
“與”短路邏輯運算:只要第一個操作數為false,則其邏輯運算的結果一定為false,如果COMMAND1能夠執行成功,則COMMAND2會被執行,如果COMMAND1執行失敗,則COMMAND2不會被執行
或:邏輯加法 ||(相當于物理電路中的并聯)
只有兩個全是false時,才會false
t||t-->t
t||f-->t
f||t-->t
f||f-->f
“或”的短路邏輯運算:只要第一個操作數為true,則其邏輯運算的結果一定為true
COMMAND1||COMMAND2
只要COMMAND1執行成功了,COMMAND2就沒有執行的必要了,只有當COMMAND1執行失敗,cOMMAND2才會被執行
非:邏輯取反 單目運算符 !
!true=!false
!false=!true
邏輯編程的優先級:!>&&>||
德摩根定律:?。╝&&b)=!a||!b
?。╝||b)=!a&&!b
異或:雙目運算符
比對兩個操作數是否不同,如果不同,則邏輯運算結果為真,如果相同,則邏輯運算結果為假
接下來說一下shell腳本編程。你需要知道的一點是程序=指令+數據
編程:簡單說就是編寫程序源代碼
為了能夠讓用戶在使用計算機的時候,可以讓計算機以非交互式的方式完成某些任務,需要將這些任務編織成為一個文件,讓計算機順序讀取,從而實現功能
而編程的語言又分為高級語言和低級語言
高級語言根據源代碼的處理方式分為
編譯運行語言:源代碼-->編譯器(編譯處理)-->匯編器(完成匯編操作)-->[鏈接器(庫的鏈接)]-->匯編成可以直接執行的二進制文件
解釋運行語言:源代碼-->直接啟動跟源代碼對應的解釋器程序,由解釋器邊解釋邊運行
根據其編程過程中的功能的實現是調用庫還是調用外部程序文件
完整編程語言:利用庫或編程組件進行編程
腳本編程語言:解釋器
shell腳本:調用shell程序,其次調用需要的外部命令文件,命令解釋器,
提供了單一的功能編程接口,過程式編程邏輯的支持
根據程序的編寫規范又分為
過程式編程語言
以指令(算法)為中心,圍繞著指令(算法)的實現設計數據和數據結構,數據為指令服務的
算法和指令的實現形式
順序執行
選擇執行
循環執行
對象式編程語言:
以數據為中心,將數據實例化為類,圍繞著數據的需求來部署指令(算法)
類、屬性、方法
低級語言: 編程語言
而shell腳本編程屬于過程式編程語言,解釋運行的語言,依賴于外部程序文件運行
shell腳本:
1.純文本文檔—文件中所存儲的數據都是以字符為單位進行存儲的
2.根據用戶需求來解決用戶問題的大量命令的組合體
3.很多命令不具備“執行冪等性”,在shell腳本中就需要使用大量的程序邏輯來判斷某個命令是否滿足運行條件,以避免在運行過程中出現嚴重錯誤
這里解釋一下執行冪等性:任何命令多次執行的結果是一致的
寫shell腳本,對內容也有一定的書寫規范
shell腳本中的代碼內容
1.首行必須是shebang(解釋器路徑),shebang必須占據絕對行首;在執行時啟動相應的解釋器已解釋腳本內諸多的命令;
#!/bin/bash
#!/bin/sh
#!/usr/bin/python
#!/usr/bin/per
2.在shell腳本中,除了shebang之外,以#占據絕對行首的內容均為注釋行,解釋器會忽略這樣的行的內容
3.解釋會忽略腳本中所有的空白行
4.大量的命令和關鍵字(if,else,then,do,while,)
注意:shell腳本一旦運行,是在當前的shell中根據shebang的指示,開啟一個解釋器(子shell)解釋執行代碼內容,shell腳本的內容是在以個子shell進程中實現的
編寫shell的腳本有很多,我們可以使用Nano、vi、vim、emacs等來進行編寫,推薦使用vim,約定下的腳本文件名的后綴為.sh,也可以不加
腳本的運行方法:
1.為腳本文件賦予執行權限,直接運行此文件;
chmod +x /PATH/TO/SCRIPI_FILE
如果在執行腳本的時候,只寫腳本文件名不給出路徑的話,必須保證PATH變量中保存的路徑下能夠找到該腳本文件
2.直接使用解釋器運行腳本,將腳本作為解釋器命令的參數
bash /PATH/TO/SCRIPI_FILE
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。