本周的第二次課講的是腳本編寫(xiě)初步,要想編寫(xiě)好腳本,按照老師的意思那就必須得對(duì)于之前學(xué)過(guò)的基本命令爛熟于心,所有還必須得把之前的博客補(bǔ)上,才會(huì)對(duì)于腳本編寫(xiě)打下良好的基礎(chǔ),那今天我們就來(lái)說(shuō)說(shuō)一說(shuō)何為腳本。
我們注重客戶提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好成都做網(wǎng)站、網(wǎng)站制作服務(wù),我們努力開(kāi)拓更好的視野,通過(guò)不懈的努力,創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),重慶小程序開(kāi)發(fā),網(wǎng)站開(kāi)發(fā),技術(shù)開(kāi)發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫(kù)的技術(shù)開(kāi)發(fā)工程師。在介紹腳本之前我們先了解一個(gè)概念,bash特性之多命令執(zhí)行
我們?cè)谥坝袑W(xué)過(guò)怎樣把幾個(gè)命令連接在一起執(zhí)行,以上就是常見(jiàn)的兩種$()和管道,但這兩者都不是很方便,其中管道更是要求前一個(gè)命令必須有輸出,所有我們運(yùn)用了邏輯運(yùn)算的概念去執(zhí)行多個(gè)命令。
~]# COMMAND1 $(COMMAND2)
~]# COMMAND1 | COMMAND2... 進(jìn)程之間的通信(IPC)
順序執(zhí)行結(jié)構(gòu):
~]# COMMAND1 ; COMMAND2 ; ...
選擇執(zhí)行結(jié)構(gòu):
下面介紹幾種最簡(jiǎn)單的邏輯運(yùn)算,因?yàn)槲覀儗I(yè)之前學(xué)過(guò),所以理解起來(lái)比較容易,大家有沒(méi)學(xué)過(guò)的還是得仔細(xì)思考一陣
邏輯運(yùn)算:
與:邏輯乘法,&&,雙目運(yùn)算符
0:SUCCESS --> true
1-255:FAILURE --> false
true && true = true
true && false = false
false && true = false
false && false = false
“與”的短路邏輯運(yùn)算:只要第一個(gè)操作數(shù)為false,則其邏輯運(yùn)算的結(jié)果一定為false
COMMAND1 && COMMAND2
如果COMMAND1能夠成功執(zhí)行,則COMMAND2會(huì)被執(zhí)行
如果COMMAND1執(zhí)行失敗,則COMMAND2不會(huì)被執(zhí)行
或:邏輯加法,||,雙目運(yùn)算符
true || true = true
true || false = true
false || true = true
false || false = false
“或”的短路邏輯運(yùn)算:只要第一個(gè)操作數(shù)為true,則其邏輯運(yùn)算的結(jié)果一定為true
COMMAND1 || COMMAND2
只要COMMAND1能夠成功執(zhí)行,COMMAND2就沒(méi)有必要執(zhí)行了
只有當(dāng)COMMAND1執(zhí)行失敗的時(shí)候,COMMAND2才會(huì)被執(zhí)行
非:邏輯取反,!,單目運(yùn)算符
!STRING:讀取命令歷
! true = false
! false = true
! COMMAND
! COMMAND1 && COMMAND2相當(dāng)于 COMMAND1 || COMMAND2
! COMMAND1 || COMMAND2相當(dāng)于 COMMAND1 && COMMAND2
德摩根定律:
?。ˋ && B)== !A || !B
?。ˋ || B)== !A && !B
邏輯運(yùn)算符優(yōu)先級(jí):
!>&&>||
異或:雙目運(yùn)算符
比對(duì)兩個(gè)操作數(shù)是否不同,如果不同,則邏輯運(yùn)算結(jié)果為真,如果相同,則邏輯運(yùn)算結(jié)果為假
以上是關(guān)于邏輯運(yùn)算最基本的概念,大家努力記住并理解他就好。
下面正式說(shuō)一下什么是shell腳本編程
shell腳本編程:
什么叫編程?
編寫(xiě)程序源代碼
為了能夠讓用戶使用計(jì)算機(jī)的時(shí)候,可以讓計(jì)算機(jī)以非交互的方式完成某些任務(wù),我們需要將這些任務(wù)編制成為一個(gè)文件,讓計(jì)算機(jī)順序讀取,從而實(shí)現(xiàn)功能。
在我看來(lái)這是一種節(jié)省人力的方式,如果我們一條條指令去敲得話,會(huì)浪費(fèi)大量的時(shí)間精力,如果我們事先將其編成連續(xù)的代碼,讓計(jì)算機(jī)順序去執(zhí)行,就會(huì)大大節(jié)省我們的時(shí)間。
編程語(yǔ)言:
高級(jí)語(yǔ)言:
根據(jù)源代碼的處理方式:
編譯運(yùn)行語(yǔ)言:
源代碼-->編譯器(編譯)-->匯編器(匯編)-->{鏈接器(庫(kù)的鏈接)}-->可以直接運(yùn)行的二進(jìn)制文件
解釋運(yùn)行語(yǔ)言:
源代碼-->直接啟用跟源代碼對(duì)應(yīng)的解釋器程序,由解釋器邊解釋邊執(zhí)行
根據(jù)其編程過(guò)程中的功能的實(shí)現(xiàn)是調(diào)用庫(kù)還是外部程序文件:
完整編程語(yǔ)言:利用庫(kù)或編程組件進(jìn)行編程
腳本編程語(yǔ)言:解釋器
shell腳本:調(diào)用shell程序,其次要調(diào)用我們需要的外部命令文件,命令解釋器
提供了單一功能的編程接口:對(duì)所謂的過(guò)程式編程邏輯的支持
根據(jù)程序的編寫(xiě)范式:程序=指令+數(shù)據(jù) 程序=算法+數(shù)據(jù)結(jié)構(gòu)
過(guò)程式編程語(yǔ)言:
以指令(算法)為中心,圍繞指令(算法)的實(shí)現(xiàn)設(shè)計(jì)數(shù)據(jù)和結(jié)構(gòu),數(shù)據(jù)為指令服務(wù)的
算法或指令的實(shí)現(xiàn)方式:
順序執(zhí)行
選擇執(zhí)行
循環(huán)執(zhí)行
面向?qū)ο缶幊陶Z(yǔ)言:
以數(shù)據(jù)(數(shù)據(jù)結(jié)構(gòu))為中心,將數(shù)據(jù)實(shí)例化為類(lèi),圍繞著數(shù)據(jù)的需求部署指令(算法)
類(lèi)、屬性、方法
低級(jí)語(yǔ)言:
匯編語(yǔ)言:
以上是關(guān)于編程的一些概念,對(duì)于我們理解腳本有很大作用。
shell腳本編程:
過(guò)程式編程語(yǔ)言,解釋運(yùn)行,依賴于外部程序文件運(yùn)行
shell腳本到底是什么:
1.純文本文檔-文件中所存儲(chǔ)的數(shù)據(jù)都是義字符為單位進(jìn)行存儲(chǔ)的
2.根據(jù)用戶的需求來(lái)解決用戶問(wèn)題的大量命令的組合體
3.“執(zhí)行冪等性”-任何命令多次執(zhí)行的結(jié)果是一致的
很多命令都不具備“執(zhí)行冪等性”-任何命令多次執(zhí)行的結(jié)果是一致的
在shell腳本中就需要使用大量的程序邏輯來(lái)判斷某個(gè)命令是否滿足其運(yùn)行條件,以避免在運(yùn)行過(guò)程中出現(xiàn)嚴(yán)重錯(cuò)誤
shell腳本的代碼內(nèi)容:
1.首先必須是shebang,解釋器路徑,必須占據(jù)絕對(duì)行首:在執(zhí)行時(shí),啟動(dòng)相應(yīng)的解釋器去解釋腳本內(nèi)諸多內(nèi)容
#!/bin/bash
2.在shell腳本中,除了shebang外,以#占據(jù)絕對(duì)行首的內(nèi)容,均為注釋行,解釋器會(huì)自動(dòng)忽略這樣的行的內(nèi)容
3.解釋會(huì)忽略腳本中所有的空白行
4.大量的命令和關(guān)鍵詞(if、else、then、do)
注意:shell腳本一旦運(yùn)行,是在當(dāng)前的shell中根據(jù)shebang的指示,開(kāi)啟一個(gè)解釋器(子shell)解釋代碼內(nèi)容,shell腳本的內(nèi)容是在一個(gè)子shell中實(shí)現(xiàn)的
我們可以利用文本編輯工具來(lái)編寫(xiě)shell腳本
nano vi vim emacs pico
推薦使用vim
約定下,腳本文件名的后綴為.sh,也可以不加:
腳本的運(yùn)行方法:
1.位腳本文件賦予執(zhí)行權(quán)限,直接運(yùn)行此文件
chmod +x /PATH/TO/SCRIPT_FILE
~]# /PATH/TO/SCRIPT_FILE
如果直接在執(zhí)行腳本時(shí),只寫(xiě)腳本文件名不給出路徑的話,必須確保PATH變量中保存的路徑下,能找到該腳本文件
2.直接使用解釋器運(yùn)行腳本,將腳本作為解釋器命令的參數(shù)
bash /PATH/TO/SCRIPT_FILE
這只是腳本的最基本的知識(shí),關(guān)于腳本,我們必須得自己動(dòng)手去寫(xiě),才會(huì)發(fā)現(xiàn)自己的問(wèn)題,其中最基礎(chǔ)最基礎(chǔ)的還是命令的使用,以后有時(shí)間一定要把之前的補(bǔ)上,先去寫(xiě)作業(yè)了。。。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。