新聞中心
一、為什么要學(xué)習(xí)Linux腳本編程

尉犁網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
在Linux系統(tǒng)中,腳本編程是一項(xiàng)重要的技能。隨著Linux操作系統(tǒng)的日益流行,掌握Linux腳本編程已成為一項(xiàng)必要的技能。腳本編程可以讓用戶(hù)自動(dòng)化任務(wù),減少人為操作,提高工作效率;同時(shí),也可以在排錯(cuò)和日志分析方面提供幫助。因此,學(xué)習(xí)Linux腳本編程是非常有必要的。
二、學(xué)習(xí)Linux腳本編程的基礎(chǔ)知識(shí)
在學(xué)習(xí)Linux腳本編程前,需要掌握一些基礎(chǔ)知識(shí)。需要學(xué)習(xí)Linux的基本操作和命令,包括文件操作、目錄操作、文本編輯、進(jìn)程管理等。此外,還需要了解常用的編程語(yǔ)言,如Bash、Perl、Python等,其中Bash是Linux系統(tǒng)默認(rèn)的命令解釋器,在Linux腳本編程中使用廣泛。
在掌握以上基礎(chǔ)知識(shí)的基礎(chǔ)上,可以進(jìn)一步學(xué)習(xí)Linux腳本編程。在Linux系統(tǒng)下,通過(guò)編寫(xiě)Shell腳本來(lái)實(shí)現(xiàn)自動(dòng)化任務(wù)。Shell是一種命令解釋器,它是Linux系統(tǒng)下最為常用的交互式用戶(hù)界面,也是Linux腳本編程的主要工具。
三、編寫(xiě)Linux腳本的基本語(yǔ)法
Linux腳本編程采用的語(yǔ)言是Shell,腳本的語(yǔ)法非常簡(jiǎn)單,具有高度可讀性。在編寫(xiě)Linux腳本時(shí),需要掌握一些基本語(yǔ)法,包括:
1. 注釋?zhuān)鹤⑨層糜谡f(shuō)明腳本的作用和工作流程,以“#”開(kāi)頭。
2. 變量:變量用于存儲(chǔ)數(shù)據(jù),在Linux腳本中,變量名以字母或下劃線開(kāi)頭,可以賦值任何數(shù)據(jù)類(lèi)型。
3. 條件語(yǔ)句:用于根據(jù)不同的條件執(zhí)行不同的操作,包括if、elif、else等關(guān)鍵字。
4. 循環(huán):用于重復(fù)執(zhí)行某個(gè)操作,包括for、while、until等關(guān)鍵字。
5. 函數(shù):用于封裝一段代碼,以便在腳本中多次使用。
在學(xué)習(xí)這些基本語(yǔ)法之后,可以開(kāi)始編寫(xiě)簡(jiǎn)單的Linux腳本了。
四、Linux腳本編程的實(shí)例演練
以下是一個(gè)簡(jiǎn)單的Linux腳本編程的實(shí)例演練,通過(guò)對(duì)該實(shí)例的學(xué)習(xí),可以掌握Linux腳本編程的基本流程。
實(shí)例:統(tǒng)計(jì)某文件夾下文件的大小
腳本:
#!/bin/bash
#定義變量
dir=/home/user/docs
#循環(huán)遍歷目錄
for file in $(ls $dir)
do
#統(tǒng)計(jì)文件大小,輸出結(jié)果
size=$(du -s $dir/$file | awk ‘{print $1}’)
echo “文件名:$file;大小:$size KB”
done
在這個(gè)腳本中,首先定義了一個(gè)變量dir,用于存儲(chǔ)目標(biāo)文件夾的路徑。然后使用for循環(huán)遍歷目錄,讀取每個(gè)文件名,并使用du命令來(lái)統(tǒng)計(jì)文件大小。最后使用echo命令輸出結(jié)果。
五、Linux腳本編程的進(jìn)階技能
除了學(xué)習(xí)以上基本內(nèi)容之外,還可以進(jìn)一步學(xué)習(xí)Linux腳本編程的進(jìn)階技能。這些技能可以讓你更加深入地理解Linux腳本編程,并在實(shí)際工作中得心應(yīng)手。
1. 正則表達(dá)式:正則表達(dá)式是一種用于匹配文本的語(yǔ)言,通常用于處理字符串。在Linux腳本編程中,掌握正則表達(dá)式可以幫助你更好地處理數(shù)據(jù)。
2. 控制語(yǔ)句:除了基本的條件語(yǔ)句和循環(huán)語(yǔ)句之外,Linux腳本編程還有其他控制語(yǔ)句,如break、continue、case等,用于控制程序的執(zhí)行流程。
3. 交互式腳本:在Linux系統(tǒng)中,可以編寫(xiě)交互式腳本,通過(guò)與用戶(hù)交互來(lái)執(zhí)行特定的操作。這種腳本可以在安裝軟件、配置系統(tǒng)等方面提供幫助。
4. 進(jìn)程管理:Linux腳本編程還可以使用一些命令來(lái)管理進(jìn)程,如ps、kill、nice等,用于啟動(dòng)、停止、調(diào)整進(jìn)程優(yōu)先級(jí)等操作。
Linux腳本編程是一項(xiàng)非常有用的技能,可以在日常工作中大大提高工作效率,也可以提高技能水平,為自己的職業(yè)發(fā)展打好基礎(chǔ)。通過(guò)不斷學(xué)習(xí),我們可以不斷提高自己的Linux腳本編程水平,實(shí)現(xiàn)更加復(fù)雜的任務(wù)。
相關(guān)問(wèn)題拓展閱讀:
- 讓Linux系統(tǒng)保持活力的優(yōu)化腳本
- linux腳本中的冒號(hào)是什么意思? 之一行:read YN , 第二行 :${YN:=yes},第三行 case $YN in …
讓Linux系統(tǒng)保持活力的優(yōu)化腳本
筆者從生產(chǎn)系統(tǒng)上和網(wǎng)絡(luò)資料上總結(jié)出幾種優(yōu)化腳本,腳本從磁盤(pán)和內(nèi)存方面入手,讓Linux系統(tǒng)保持活力。特別是第三種清理緩存釋放內(nèi)存,可以結(jié)合筆者以前的文章-Linux健康檢查腳本health-check-script來(lái)做進(jìn)一步的包裝,特別是在做大量數(shù)據(jù)備份之后,完成自動(dòng)檢測(cè)和清理工作。
下面的delete_data函數(shù)中的三條命令可以完成目錄下所有文件、log文件和log.gz文件按過(guò)期時(shí)間清理。
delete_data()
{
delete_time=$1
#清理目錄下所有過(guò)期文碼神宏件
find /home/pi/log/ -mtime +$delete_time -exec rm -r {} \;
#清理目錄下.log過(guò)期文件
find /home/pi/log/ -mtime +$delete_time -name ‘*.log’ -exec rm -r {} \;
#清理目錄下.log.gz過(guò)期文件
find /home/pi/log/ -mtime +$delete_time -name ‘*.log.gz’ -exec rm -r {} \;
}
2.1目錄下文件單獨(dú)壓縮打包
#將/home/pi/log/目錄下的.log文件打包成.gz文件,
find /home/pi/log/ -name ‘*.log’ -exec gzip -f {} \;
運(yùn)行測(cè)試,默認(rèn)gzip 會(huì)刪除源文件,并生成xx.gz文件。
zcat filename.gz 可以直接查看文件內(nèi)容。gunzip –c filename.gz 可以解壓縮并保留源文件,但是解壓后顯示在標(biāo)準(zhǔn)輸出上,沒(méi)有解壓后文件。gunzip -cv filename.gz > filename ,可以保留源文件和壓縮后文件,-v是顯示進(jìn)度。壓縮保留源文件是 gzip -cv filename > filename.gz 。
2.2目錄下文件以前一起打包壓縮
gzip無(wú)法壓縮文件夾,僅用于壓縮單個(gè)文件,要壓縮文件夾,應(yīng)該使用tar + gzip ,即是tar -z。
#將log目錄下的文件打包并以時(shí)間命令,打包后以 gzip 壓縮
tar -zcvf $(date +%Y%m%d%H%M%S)log.tar.gz log/
tar -ztvf log.tar.gz可以查看包內(nèi)有哪些文件。
tar -zxvf7log.tar.gz解壓縮到當(dāng)前目錄
tar -zxvf 瞎稿7log.tar.gz -C log2/ 將包解壓到log2目錄下。
頻繁的文件訪問(wèn)(特別是數(shù)據(jù)備份后)會(huì)導(dǎo)致系統(tǒng)的Cache使用量大增。sysctl命令用于運(yùn)行時(shí)配置內(nèi)核參數(shù),這些參數(shù)位于/proc/sys目錄下。
這里我們來(lái)看一下 buff/cache的作用。
buffer指Linux內(nèi)存的 緩沖區(qū)緩存 Buffer cache,cache指Linux內(nèi)存中的 頁(yè)面緩存 Page cache。
Cache(Page cache,頁(yè)面緩存): 主要用來(lái)作為文件系統(tǒng)上的文件數(shù)據(jù)的緩存來(lái)用,尤其是針對(duì)當(dāng)進(jìn)程對(duì)文件有read/write操作的時(shí)候。
Buffer(Buffer cache,緩沖區(qū)緩存): 主要是針對(duì)塊設(shè)備進(jìn)行緩存的,比如當(dāng)我們對(duì)一個(gè)文件進(jìn)行寫(xiě)操作的時(shí)候,page cache的內(nèi)容會(huì)被改變,而buffer cache則可以用來(lái)將page標(biāo)記為不同的緩沖區(qū),并記錄是哪一個(gè)緩沖區(qū)被修改了。這樣,內(nèi)核在后續(xù)執(zhí)行臟數(shù)據(jù)的回寫(xiě)(writeback)時(shí)遲冊(cè),就不用將整個(gè)page寫(xiě)回,而只需要寫(xiě)回修改的部分即可。
Linux內(nèi)核會(huì)在內(nèi)存將要耗盡的時(shí)候,觸發(fā)內(nèi)存回收的工作,以便釋放出內(nèi)存給急需內(nèi)存的進(jìn)程使用。怎么手動(dòng)清除呢?修改/proc/sys/vm/drop_caches 的值??纯从⒄Z(yǔ)說(shuō)明:
to free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.
即3可以釋放所有類(lèi)型的緩存。
同時(shí)為了防止數(shù)據(jù)丟失,命令sync 將臟頁(yè)的內(nèi)容寫(xiě)回硬盤(pán),但可能伴隨著系統(tǒng)磁盤(pán)IO飆高。
運(yùn)行free -m命令,再運(yùn)行下面的腳本中的命令,發(fā)現(xiàn) buff/cache減少了21M。
linux腳本中的冒號(hào)是什么意思? 之一行:read YN , 第二行 :${YN:=yes},第三行 case $YN in …
題主你好,
寫(xiě)在前面:
題主的代碼寫(xiě)的其實(shí)有點(diǎn)問(wèn)題, 第2行的第1個(gè)字符,冒號(hào),和第2個(gè)字符,美元符號(hào),之間是有空格的,正確的寫(xiě)法是:
: ${YN:=yes}
不同的語(yǔ)言語(yǔ)法限制程度不一樣, 在shell腳本中,對(duì)空格的限制就比較嚴(yán)格, 同樣的代碼, 你不加空格就是錯(cuò)的, 加上才對(duì). 相同的用法在test命令的簡(jiǎn)寫(xiě)形式中也比較常見(jiàn)(就不具體展開(kāi)了,題主有需要可以追問(wèn))
下面解釋題主的代碼:
其實(shí)題主的代碼邏輯很簡(jiǎn)單:
從標(biāo)準(zhǔn)輸入中讀取值賦給變量YN //這是之一行代碼的作用
然后檢測(cè)之一行的變量YN是否真的有值,如果有值,則跳過(guò), 沒(méi)值的話則將yes作為變量值賦給YN. 這里題主可能會(huì)問(wèn), 之一行代碼不是已經(jīng)從標(biāo)準(zhǔn)輸入讀取值賦給YN了嘛,怎么第2句還要檢測(cè)YN是否有值呢? 這是因?yàn)槿绻痪浯a執(zhí)行后, 你沒(méi)有從鍵盤(pán)輸入值,而是直接按的回車(chē),則YN就沒(méi)有值. 將第1句和第2句要連起來(lái)看, 就是:
“當(dāng)我們沒(méi)有從標(biāo)準(zhǔn)輸入賦值給YN時(shí), YN的默認(rèn)值是yes” //這就是第二行代碼的作用
至于第三猛嫌森行代碼就沒(méi)啥說(shuō)的了, 就是看$YN和下面給定的哪個(gè)值相匹配,則執(zhí)行哪個(gè)值下的語(yǔ)句,因?yàn)榈谌溥@里也沒(méi)寫(xiě)全,就先說(shuō)到這里
上面只是解釋了一下這三行代碼的意思, 下面再來(lái)說(shuō)一下題主問(wèn)題中 “第2行代碼中兩個(gè)冒號(hào)的意思”
先說(shuō)第2個(gè)冒號(hào)吧, shell腳本中有一個(gè)概念叫替換運(yùn)算符, 我們常見(jiàn)的變量賦值的形式是:
變量名=值
另外shell腳本還提供了一組稍復(fù)雜一點(diǎn)的處理變量的運(yùn)算符, ” := “就是其中一個(gè), 這么說(shuō)可能有點(diǎn)不對(duì), 完整的語(yǔ)法是:
${變量名:=值}
而上面這個(gè)語(yǔ)法的處理邏輯是: 先看看 ” 變量名 “是否存在并且非空, 如果是,則返回” 變量名 “的值. 舉例來(lái)說(shuō):
name=”zhangsan”
echo ${name:=lisi}
上面之一行代碼是給變量name賦值為zhangsan, 第2行代碼是用echo 輸出${name:=lisi}的返回值, 而${name:=list}具體是啥值,上面也說(shuō)了判定邏輯, 看看name是否存在且非空, 因?yàn)樯厦娑x了name=”zhangsan”, 所以這里name肯定是存者拿在且非空的, 所以${name:lisi}的返回值是name變量的值,即zhangsan. 因此 echo ${name:=lisi}也就變成了我們常見(jiàn)的形式: echo zhangsan, 即echo ${name:=lisi}輸出的值為zhangsan.
上面是” 變量名 “存在的情況, 下面再來(lái)說(shuō)” 變量名 “不存在的情況. 舉例來(lái)說(shuō):
echo ${name:=lisi}
就上面這一行代碼, 這里就簡(jiǎn)單說(shuō)了, 因?yàn)閚ame上面沒(méi)有定義, 所以name是不存在的, 因此會(huì)將lisi賦給變量name, 返回值為lisi, 因此echo ${name:=lisi}變成了echo lisi, 所以最后的輸出值為: lisi.
下面再來(lái)第2行代碼的之一個(gè)冒號(hào), 如果沒(méi)有第1個(gè)冒號(hào), YN的值會(huì)被作枝畝為命令去執(zhí)行, 也就是說(shuō),
如果你只寫(xiě) ${YN:=yes} , 則當(dāng)YN之前有值,且為no時(shí),則這句執(zhí)行后, 返回值為no,然后no會(huì)被被作為一個(gè)命令執(zhí)行, 因?yàn)橄到y(tǒng)里沒(méi)有no這個(gè)命令,所以會(huì)報(bào)錯(cuò), 說(shuō)no這個(gè)命令沒(méi)發(fā)現(xiàn); 而當(dāng)YN之前沒(méi)有值時(shí), 該命令執(zhí)行后,返回值為yes, 同樣,yes也會(huì)被作為命令執(zhí)行, 會(huì)不斷的輸出y(這就是一種特殊性, 因?yàn)閥es是linux中的一個(gè)命令,并且它沒(méi)有參數(shù)的時(shí)候也不會(huì)報(bào)錯(cuò), 但會(huì)重復(fù)輸出y,因此你不會(huì)看到報(bào)錯(cuò)信息, 而是不斷輸出的y,如果你換一個(gè)值,比如${YN:=666},則執(zhí)行后,就會(huì)輸出666命令沒(méi)發(fā)現(xiàn)).
因此最簡(jiǎn)單的記第1個(gè)冒號(hào)的作用是:
“它只評(píng)估后面的參數(shù),而忽略參數(shù)的返回值”
寫(xiě)在最后: 上面洋洋灑灑說(shuō)了一堆, 有些地方邏輯不是太嚴(yán)謹(jǐn),有錯(cuò)誤的地方也請(qǐng)題主指正.
希望可以幫到題主, 歡迎追問(wèn).
你這恐怕不是純粹的bash腳本吧
關(guān)于$()$() linux腳本的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
分享題目:輕松掌握Linux腳本編程——方法($()linux腳本)
網(wǎng)站地址:http://m.fisionsoft.com.cn/article/coepodp.html


咨詢(xún)
建站咨詢(xún)
