Linux學(xué)習(xí)筆記之shell腳本

前言:shell script就是針對shell所寫的腳本;shell script就是利用shell的功能所寫的一個(gè)程序,這個(gè)程序使用一個(gè)純文本文件,將一些shell的語法與命令(含外部命令)寫在里面,搭配正則表達(dá)式、管道命令以及數(shù)據(jù)流重定向功能等,達(dá)到我們所想要的處理目的;

shell腳本的用途:

? ? 1)自動化管理系統(tǒng)

? ? 2)追蹤與管理系統(tǒng)的重要工作

? ? 3)檢查入侵

? ? 4)連續(xù)命令單一化

? ? 5)簡單的數(shù)據(jù)處理

shell腳本的優(yōu)缺點(diǎn):

? ? shell腳本常用于系統(tǒng)管理,但是對于大量數(shù)值運(yùn)算的處理,shell腳本的處理速度較慢,并且使用的CPU資源較多,造成主機(jī)資源的分配不良,所以shell腳本不適用于數(shù)值處理相關(guān)工作;

shell腳本編寫時(shí)需要注意的地方:

? ? 1)命令的執(zhí)行方向是從上向下,從左往右的;

? ? 2)命令、參數(shù)間的多個(gè)空白都會被忽略掉,空白行(包含Tab鍵所得的空白)也會被忽略掉;

? ? 3)如果讀取到一個(gè)Enter符號(CR),就嘗試開始執(zhí)行改行的命令串;

? ? 4)如果一行內(nèi)容過多,可以使用/+Enter組合鍵進(jìn)行換行;

? ? 5)“#”可以作為批注,“#”后所有數(shù)據(jù)都會被視為批注文字并被忽略;

shell腳本執(zhí)行方式:

????1)直接命令執(zhí)行:采用此種方法執(zhí)行,shell.sh文件必須要具備可讀與可執(zhí)行的權(quán)限(rx);

????????①絕對路徑:使用如/home/user/shell.sh的絕對路徑執(zhí)行shell腳本;

? ? ? ? ②相對路徑:在/home/user/目錄下,使用如./shell.sh相對路徑執(zhí)行shell腳本;

? ? ? ? ③變量“PATH”:將shell.sh放在PATH指定的目錄內(nèi),例如~/bin/;

? ? 2)以bash進(jìn)程來執(zhí)行:通過“bash shell.sh”或“sh shell.sh”來執(zhí)行,此種方式執(zhí)行shell腳本,只需要腳本文件具有r的權(quán)限即可;

良好的shell腳本編寫習(xí)慣:

? ? 1)腳本要以#! /bin/bash為首行,用以聲明此腳本內(nèi)的語法使用的是bash的語法

? ? 2)應(yīng)該為腳本作出合適詳細(xì)的批注,如腳本的功能、版本信息、作者與聯(lián)系方、建立日期以及歷史記錄等信息

? ? 3)主要環(huán)境變量的聲明

? ? 4)程序的主體部分,即功能的實(shí)現(xiàn)部分

? ? 5)告知執(zhí)行結(jié)果,即返回執(zhí)行結(jié)果

簡單的shell腳本編寫示例如下圖所示:

簡單shell腳本示例

shell腳本執(zhí)行過程如下圖所示:

shell腳本執(zhí)行示例

shell腳本的執(zhí)行方式的不同會帶來什么不同的結(jié)果呢?

? ? 采用之前的直接執(zhí)行或者以bash子進(jìn)程的方式執(zhí)行shell腳本,都是在一個(gè)與當(dāng)前bash環(huán)境不同的bash環(huán)境中執(zhí)行的,這個(gè)新的bash環(huán)境也可以叫做子進(jìn)程,在子進(jìn)程中執(zhí)行shell腳本,涉及到的變量或操作都不會在父進(jìn)程中出現(xiàn);

? ? 采用source命令執(zhí)行shell腳本,會在當(dāng)前bash環(huán)境中執(zhí)行shell腳本,因此執(zhí)行過程中涉及的變量和操作,就會在當(dāng)前bash環(huán)境中出現(xiàn);

????因此,使用source命令執(zhí)行shell腳本,可以在更改配置文件后,不需要注銷重新登陸,即可使更改后的配置文件生效!

Linux中的常用判斷式:test、[ ]、默認(rèn)變量

? ? 1)test命令:用于檢測系統(tǒng)上是否存在某些文件或相關(guān)的屬性;

? ? test命令的格式:

? ? 判斷文件是否存在或文件類型:test????[-efd]????filename

? ? 判斷文件的權(quán)限:test ? ?[-rwx] ? ?filename

? ? 多重條件判定:test ? ?[-ao] ? ?filename

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? test????!????filename

shell腳本應(yīng)用之test命令示例:

shell腳本應(yīng)用之test命令

相關(guān)shell腳本執(zhí)行過程如下圖所示:

執(zhí)行過程示例

? ? 2)判斷符號[ ]:中括號常用于if...then...fi等條件判斷式中;

? ? 中括號[]使用時(shí)需要時(shí)需要注意:

????????①在中括號內(nèi)的每個(gè)組件都需要用空格鍵進(jìn)行分隔;

? ? ? ? ②在中括號中的變量或常量,最好都使用雙引號進(jìn)行包含;

shell腳本應(yīng)用之[ ]如下圖所示:

shell腳本應(yīng)用之[]

執(zhí)行過程如下圖所示:


執(zhí)行過程

shell腳本中的默認(rèn)變量($0,$1...)

? ? 直接舉例,比如下面的命令:

? ? sh????/scripts/sh03.sh????arg1 ? ?arg2 ? ?arg3 ? ?arg4

????????????????????$0 ? ? ? ? ? ? ? ? ? $1 ? ? ? $2 ? ? ? $3 ? ? ? ?$4

? ? 如上所示,第一個(gè)shell腳本名就是默認(rèn)變量$0,后面跟的依次為默認(rèn)變量$1,$2,$3,$4;

shell腳本應(yīng)用之默認(rèn)變量示例如下:


shell腳本應(yīng)用之默認(rèn)變量

執(zhí)行過程如下圖所示:


執(zhí)行過程

Linux中的 if 條件判斷式:

? ? if...then:在編程中,基本上都會使用到if判斷語句,而在shell腳本編程中,同樣也會用到if判斷語句,只不過關(guān)鍵字以及結(jié)構(gòu)上有些不同;

????shell腳本中的最簡單的單層if判斷語句:

????????????????if ? ?[條件判斷式]; ? ?then

????????????????????????當(dāng)條件判斷式成立時(shí),需要進(jìn)行的命令工作內(nèi)容;

????????????????fi

? ? shell腳本中多個(gè)判斷條件的if判斷語句:

? ? ? ? ? ? ? ? if ? ?[條件判斷式1]; ? ?then

? ? ? ? ? ? ? ? ? ? ? ? 當(dāng)條件判斷式1成立時(shí),需要進(jìn)行的命令工作內(nèi)容;

? ? ? ? ? ? ? ? elif ? ?[條件判斷式2]; ? ?then

? ? ? ? ? ? ? ? ? ? ? ? 當(dāng)條件判斷式1不成立但條件判斷式2成立時(shí),可以進(jìn)行的命令工作內(nèi)容;

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? ? ? 當(dāng)條件判斷式1和2都不成立時(shí),可以進(jìn)行的命令工作內(nèi)容;

? ? ? ? ? ? ? ? fi

shell腳本應(yīng)用之if判斷如下圖所示:

shell叫本應(yīng)用之if判斷

執(zhí)行過程如下圖所示:


執(zhí)行過程

if判斷應(yīng)用之綜合案例:判斷當(dāng)前主機(jī)上已經(jīng)啟動的服務(wù);

具體shell腳本如下所示:

檢測已啟動服務(wù)

執(zhí)行過程如下圖所示:

執(zhí)行過程

Linux中的case判斷語句:

case語法如下:

? ? ? ? case????$變量名稱 ? ?in

????????"第一個(gè)變量內(nèi)容")

? ? ? ? ? ? ? ? 程序段

????????????????; ;

? ? ? ? "第二個(gè)變量內(nèi)容")

? ? ? ? ? ? ? ? 程序段

? ? ? ? ? ? ? ? ; ;

? ? ? ? *)

? ? ? ? ????????其他任何變量內(nèi)容對應(yīng)的程序段

? ? ? ? ? ? ? ? ; ;

? ? ? ? esac

case應(yīng)用實(shí)例如下圖所示:

shell腳本之case應(yīng)用

執(zhí)行過程如下圖所示:

執(zhí)行過程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,737評論 0 5
  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多,請查閱幫助信息) 1、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,542評論 1 19
  • 本文全面系統(tǒng)地介紹了shell腳本調(diào)試技術(shù),包括使用echo, tee, trap等命令輸出關(guān)鍵信息,跟蹤變量的值...
    liuzg0734閱讀 1,010評論 0 14
  • 概述 首先,咱們來了解一下,什么是Shell。操作系統(tǒng)內(nèi)核給我們提供了各種接口,同時(shí)也提供了各種用戶層的庫,理論上...
    keysaim閱讀 1,525評論 0 0
  • 鼓浪嶼八卦樓的管風(fēng)琴的聲音想想也是很有意思??梢燥h飄渺渺的去很遠(yuǎn)吧,就像那么遠(yuǎn)地搬過來。 在國際貿(mào)易中,外國客人有...
    lamanly閱讀 242評論 0 0

友情鏈接更多精彩內(nèi)容