新聞中心
一、為什么要學習Linux腳本編程

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


咨詢
建站咨詢
