精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux操作環(huán)境:將Python和shell命令的Bash結(jié)合在一起

如意 ? 來源:馬哥Linux運維 ? 作者:馬哥Linux運維 ? 2020-09-16 15:17 ? 次閱讀

對于Linux用戶而言,命令行操作我們已經(jīng)非常熟悉了。與其他流行的操作系統(tǒng)不同,在Linux社區(qū)中,使用命令行與使用圖形用戶界面執(zhí)行類似任務(wù)相比,命令行通??梢蕴峁└鼉?yōu)雅,更有效的解決方案。

隨著Linux社區(qū)對命令行的依賴不斷增長,UNIX shell(如bash和zsh)已發(fā)展成為極其強大的工具,可以補充UNIX shell的經(jīng)驗。使用bash和其他類似的shell,可以使用許多強大的功能,例如管道,文件名通配符以及從稱為腳本的文件中讀取命令的功能。

讓我們看一個真實的示例來演示命令行的功能。每次用戶登錄服務(wù)時,其用戶名都會記錄到一個文本文件中。對于此示例,讓我們找出有多少唯一用戶使用該服務(wù)。

以下示例中的一系列命令通過將較小的構(gòu)建塊鏈接在一起,顯示了更復(fù)雜的實用工具的功能:

$ cat names.log | sort | uniq | wc -l

管道符號(|)用于將一個命令的標(biāo)準(zhǔn)輸出傳遞到下一命令的標(biāo)準(zhǔn)輸入。在此處的示例中,cat names.txt的輸出傳遞到sort命令中。sort命令的輸出是按字母順序重新排列文件的每一行。隨后將其傳遞給uniq命令,該命令將刪除所有重復(fù)的名稱。最后,uniq的輸出傳遞到wc命令。wc是計數(shù)命令,并且設(shè)置了-l標(biāo)志,它返回行數(shù)。這使您可以將許多命令鏈接在一起。

但是,有時所需的內(nèi)容可能會變得非常復(fù)雜,并且將命令鏈接在一起可能變得笨拙。在這種情況下,shell腳本就是答案。Shell腳本是由Shell讀取并按順序執(zhí)行的命令列表。Shell腳本還支持某些編程語言基礎(chǔ)知識,例如變量,流控制和數(shù)據(jù)結(jié)構(gòu)。Shell腳本對于將經(jīng)常重復(fù)運行的批處理作業(yè)非常有用。不幸的是,shell腳本有一些缺點:

Shell腳本很容易變得過于復(fù)雜,并且對于想要改進或維護它們的開發(fā)人員來說是不可讀的。

這些shell腳本的語法和解釋器通常很笨拙且不直觀。語法越笨拙,對于必須使用這些腳本的開發(fā)人員來說,可讀性就越差。

該代碼通常無法在其他腳本中使用。腳本之間的代碼重用往往很困難,并且腳本往往非常特定于某個問題。

用于高級功能(例如HTML解析或HTTP請求)的庫不像現(xiàn)代編程和腳本語言那樣容易獲得。

這些問題會使shell腳本難以處理,并經(jīng)常導(dǎo)致大量開發(fā)人員時間浪費。取而代之的是,Python編程語言可以用作非常有力的替代品。使用Python代替Shell腳本有很多好處:

默認情況下,所有主要的Linux發(fā)行版都安裝了Python。打開命令行并立即鍵入python,將使您進入Python解釋器。這種普遍性使它成為大多數(shù)腳本任務(wù)的明智選擇。

Python具有非常易于閱讀和理解的語法。它的風(fēng)格強調(diào)簡約和簡潔的代碼,同時允許開發(fā)人員以適合shell腳本的準(zhǔn)系統(tǒng)風(fēng)格進行編寫。

Python是一種解釋型語言,這意味著沒有編譯階段。這使Python成為編寫腳本的理想語言,它允許您以解釋的方式快速嘗試新代碼。這使開發(fā)人員可以快速修改,而不必將整個程序?qū)懙轿募小?/p>

Python是一種功能齊全的編程語言。代碼重用很簡單,因為Python模塊可以輕松導(dǎo)入并在任何Python腳本中使用。腳本可以輕松擴展或構(gòu)建。

Python可以使用出色的標(biāo)準(zhǔn)庫和數(shù)以千計的第三方庫來處理各種高級實用程序,例如解析器和請求庫。例如,Python的標(biāo)準(zhǔn)庫包括日期時間庫,該庫允許將日期解析為指定的任何格式并將其與其他日期輕松比較。

但Python不應(yīng)替換所有bash命令。編寫以UNIX方式運行的Python程序(即讀入標(biāo)準(zhǔn)輸入并寫入標(biāo)準(zhǔn)輸出)與為現(xiàn)有的shell命令(如cat和sort)編寫Python替代品一樣強大。

讓我們以本文前面已解決的問題為基礎(chǔ)。除了已經(jīng)完成的工作之外,讓我們找出某個用戶已登錄系統(tǒng)的次數(shù)。uniq命令僅刪除重復(fù)項,但不提供有關(guān)有多少重復(fù)項的信息。代替uniq,Python腳本可以用作鏈中的另一個命令。這是一個執(zhí)行此操作的Python程序(在我的示例中,我將此文件稱為namescount.py):

Linux操作環(huán)境:將Python和shell命令的Bash結(jié)合在一起

讓我們看看這個Python腳本如何適合命令鏈。首先,它從通過sys.stdin對象公開的標(biāo)準(zhǔn)輸入中讀取輸入。任何輸出都將寫入sys.stdout對象,這是在Python中實現(xiàn)標(biāo)準(zhǔn)輸出的方式。Python字典(在其他語言中通常稱為哈希映射)用于獲取從用戶名到重復(fù)計數(shù)的映射。要獲得所有用戶的數(shù)量,請執(zhí)行以下操作:

$ cat names.log | python namescount.py

顯示用戶出現(xiàn)的次數(shù)以及用戶名的計數(shù)。接下來要做的是按順序顯示最常使用該系統(tǒng)的用戶。這可以在Python級別完成,但是讓我們使用核心UNIX實用程序已經(jīng)提供的實用程序來實現(xiàn)它。以前,我使用sort命令對字母進行排序。如果命令提供了-rn標(biāo)志,它將按降序?qū)π羞M行數(shù)字排序。隨著Python腳本按標(biāo)準(zhǔn)輸出,只需將命令通過管道傳遞到sort并檢索所需的輸出:

$ cat names.log | python namescount.py | sort -rn

這是將Python用作命令鏈一部分的強大示例。在這種情況下使用Python的優(yōu)點如下:

與cat和sort等工具鏈接的能力。簡單的實用程序(逐行讀取文件并以數(shù)字方式對文件進行排序)由久經(jīng)考驗的UNIX命令處理。這些命令也逐行讀取,這意味著這些功能可以縮放到大型文件,而且速度很快。

當(dāng)需要在鏈中進行一些繁重的工作時,可以編寫一個非常清晰,簡潔的Python腳本,該腳本將執(zhí)行其所需的工作,然后將責(zé)任轉(zhuǎn)移給鏈中的下一個鏈接。

它是一個可重用的模塊,盡管此示例專門針對名稱,但是如果您向此輸入中包含重復(fù)行的任何輸入,它將打印出每行和重復(fù)的數(shù)量。通過將Python代碼模塊化,可以將其應(yīng)用于各種場景。

為了展示以模塊化和管道方式組合Python腳本的強大功能,讓我們進一步把問題放大。讓我們找到該服務(wù)的前五名用戶。head是一個命令,它允許您指定一定數(shù)量的行以顯示給定的標(biāo)準(zhǔn)輸入。將其添加到命令鏈中將得到以下內(nèi)容:

$ cat names.log | python namescount.py | sort -rn | head -n 5

這僅顯示前五個用戶,而忽略其余用戶。同樣,要使五個用戶最少使用該服務(wù),可以使用tail命令,該命令采用相同的參數(shù)。將Python命令打印到標(biāo)準(zhǔn)輸出的結(jié)果使可以構(gòu)建和擴展其功能。

以上就是簡單的介紹,實際中大家靈活運用就好。
責(zé)編AJX

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207886
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4752

    瀏覽量

    84065
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    359

    瀏覽量

    23191
收藏 人收藏

    評論

    相關(guān)推薦

    怎么把主界面和子VI結(jié)合在一起

    就是做個電梯的界面,然后我做好了個個的功能的子VI,但是怎么調(diào)用使得運行的時候只出現(xiàn)電梯界面,然后通過電梯界面的按鈕來調(diào)用子VI的功能,反正就是不知道怎么把主界面和子VI結(jié)合在一起,求大神幫幫忙,真的很急用,謝謝了?。?!
    發(fā)表于 08-24 15:26

    幾個單獨的程序組合在一起

    怎樣把幾個個單獨的程序組合在一起,我現(xiàn)在在做環(huán)境檢測儀,我可不可以先把溫度,濕度,噪聲等程序先單獨做,然后把它們組合在一起,可以嗎,怎么組合,求大神告知
    發(fā)表于 03-23 14:22

    請問ISE和Mircoblaze是如何結(jié)合在一起的?

    大家好,有人可以向我解釋下ISE和Mircoblaze是如何結(jié)合在一起的嗎?目前我已經(jīng)在ISE中用VHDL編寫了個程序,我希望在我的設(shè)計中添加個mircoblaze。我該怎么做以
    發(fā)表于 02-19 10:59

    labview中模糊控制和pid是怎么結(jié)合在一起

    labview中模糊控制和pid是怎么結(jié)合在一起的?求高手解答,有簡單的模糊控制和pid結(jié)合在一起的vi文件最好,
    發(fā)表于 03-13 08:04

    labview 中如何把模糊控制和pid結(jié)合在一起呢?

    labview中模糊控制怎么導(dǎo)入?并且和pid結(jié)合在一起呢?有沒有相關(guān)的VI做參考,求幫助,抱拳
    發(fā)表于 03-14 10:57

    USAT和USB BooLoad能結(jié)合在一起

    嗨,有沒有可能將USAT和USB BooLoad結(jié)合在一起,以便它可以從任個電纜獲得固件?謝謝
    發(fā)表于 04-24 08:39

    如何高圖形性能和低功耗更好地結(jié)合在一起

    本文介紹了Silicon Motion開發(fā)的新架構(gòu)如何高圖形性能、低延遲、高效數(shù)據(jù)壓縮和低功耗更好地結(jié)合在一起
    發(fā)表于 06-01 06:52

    Teamcenter、TIA Portal和虛擬調(diào)試如何才能結(jié)合在一起

    PDM是什么?PLM是什么?Teamcenter、TIA Portal和虛擬調(diào)試如何才能結(jié)合在一起
    發(fā)表于 09-29 07:36

    如何DMA和環(huán)形的FIFO隊列結(jié)合在一起來使用呢

    如何DMA和環(huán)形的FIFO隊列結(jié)合在一起來使用呢?有哪些實驗步驟呢?
    發(fā)表于 12-09 08:05

    不同容量的電池組合在一起使用會出現(xiàn)什么問題?

    不同容量的電池組合在一起使用會出現(xiàn)什么問題?       如果將不同容量或新舊電池混在一起使用,有可能出現(xiàn)漏液,
    發(fā)表于 11-13 15:20 ?3291次閱讀

    微軟的合作伙伴Trimble正在嘗試HoloLens與安全帽結(jié)合在一起

    目前已經(jīng)有很多關(guān)于VR/AR/MR被用于諸如建筑等行業(yè)的例子,但MR技術(shù)的優(yōu)勢常常與安全問題產(chǎn)生沖突。為了解決這問題,微軟的合作伙伴Trimble正在嘗試HoloLens與安全帽結(jié)合在一起。
    的頭像 發(fā)表于 02-02 12:32 ?6461次閱讀

    深度學(xué)習(xí)和常微分方程結(jié)合在一起,提供四大優(yōu)勢

    Hinton創(chuàng)建的向量學(xué)院的研究者提出了類新的神經(jīng)網(wǎng)絡(luò)模型,神經(jīng)常微分方程(Neural ODE),神經(jīng)網(wǎng)絡(luò)與常微分方程結(jié)合在一起,用ODE來做預(yù)測。
    的頭像 發(fā)表于 06-26 11:19 ?1.1w次閱讀

    基于PC和PS4或Xbox結(jié)合在一起的強大主機介紹

    小孩子才做選擇題,Origin PC在CES上秀出了臺名叫Big O的強大主機,它可以PC和PS4或Xbox結(jié)合在一起,具體怎么結(jié)合要看用戶是喜歡索尼主機還是微軟主機。
    的頭像 發(fā)表于 01-08 14:05 ?2938次閱讀

    shell命令linux命令樣嗎

    結(jié)合在一起,形成個相當(dāng)于面向過程的程序,即shell script,從而實現(xiàn)些復(fù)雜的功能。 而Linux
    的頭像 發(fā)表于 11-08 10:51 ?2423次閱讀

    5G信號鏈與電平轉(zhuǎn)換結(jié)合在一起

    電子發(fā)燒友網(wǎng)站提供《5G信號鏈與電平轉(zhuǎn)換結(jié)合在一起.pdf》資料免費下載
    發(fā)表于 09-18 14:49 ?0次下載
    <b class='flag-5'>將</b>5G信號鏈與電平轉(zhuǎn)換<b class='flag-5'>結(jié)合在一起</b>