学习

_TheLinuxCommandsHandbook_

《TheLinuxCommandsHandbook》结合视频 https://www.youtube.com/watch?v=ZtqBQ68cfJc 看的

Command意义 #

更快,自动化,在任何Linux上工作,有些工作的基本需求

系统-Unix和Windows #

绿色-开源
红色-闭源
黄色-混合

图片中的Linux只是类Unix,而不是真正的Unix

FreeSoftware,开源 #

GNU与Linux

Linux只是一个操作系统内核而已,而GNU提供了大量的自由软件来丰富在其之上各种应用程序。
绝大多数基于Linux内核的操作系统使用了大量的GNU软件,包括了一个shell程序、工具、程序库、编译器及工具,还有许多其他程序
我们常说的Linux,准确地来讲,应该是叫“GNU/Linux”。虽然,我们没有为GNU和Linux的开发做出什么贡献,但是我们可以为GNU和Linux的宣传和应用做出微薄的努力,至少我们能够准确地去向其他人解释清楚GNU、Linux以及GNU/Linux之间的区别。让我们一起为GNU/Linux的推广贡献出自己的力量!

内核,用来连接硬件和软件的

TrueUNIX #

Unix一开始是收费的,后面出现Unix-like(类Unix),和Unix标准兼容。
Linux不是真正的Unix,而是类Unix。
Linux本身只是一个内核,连接硬件软件
LinuxDistributions,Linux发行版(1000多种)
Linux内核是一些GUN工具,文档,包管理器,桌面环境窗口管理,和系统一些其他东西组成的一个系统

有开源的和不开源的,Linux(LinuxGUN)完全开源

shell #

windows(powershell)
命令交给系统
terminal(最古老时是一个硬件)–屏幕+带键盘的物理设备,如今是一个软件
默认情况下,Ubuntu和大多数Linux发行版bashshell,还有zsh

setup and installing #

如果有Mac或者其他Linux发行版,则不需要额外操作。(作者在Mac里装了Ubuntu虚拟机)

WindowsSubsystem #

wsl --install
默认是Ubuntu

The Linux Handbook(电子书内容) #

Linux 手册

Preface #

前言

The Linux Handbook follows the 80/20 rule: learn in 20% of the time the 80% of a topic.
Linux 手册遵循 80/20 规则:用 20% 的时间学习某个主题的 80%。

...

基本知识

周朝君主世系图 #

资治通鉴中 #

周威烈王

完整世系图 #

《资治通鉴》从周威烈王(图里是32,这个第几任好像各家的算法不一致,不必深究)开始

001周纪一

資治通鑑卷第一

朝散大夫右諫議大夫權御史中丞充理檢使上護軍賜紫金魚袋臣

司马光 奉敕编集

胡三省 音  註

周紀一 起著雍攝提格(戊寅),盡玄黓困敦(壬子),凡三十五年。

爾雅:太歲在甲曰閼逢,在乙曰旃zhān蒙,在丙曰柔兆,在丁曰強圉,在戊曰著雍,在己曰屠維,在庚曰上章,在辛曰重光,在壬曰玄黓yì,在癸曰昭陽,是為歲陽。在寅曰攝提格,在卯曰單閼,在辰曰執徐,在巳曰大荒落,在午曰敦牂,在未曰協洽,在申曰涒tūn灘,在酉曰作噩,在戌曰掩茂,在亥曰大淵獻,在子曰困敦,在丑曰赤奮若,是為歲名。周紀分註「起著雍攝提格」,起戊寅也。「盡玄黓困敦」,盡壬子也。閼,讀如字;史記作「焉」,於乾翻。著,陳如翻。雍,于容翻。黓,逸職翻。單閼,上音丹,又特連翻;下烏葛翻,又于連翻。牂,作郎翻。涒,吐魂翻。灘,吐丹翻。困敦,音頓。杜預 世族譜曰:黃帝之苗裔,姓。后稷之後,封于;及衰,不窋zhú竄於西戎。至十二代孫太王,避;至孫文王受命,武王而有天下。自武王平王凡十三世,自平王威烈王又十八世,自威烈王赧王又五世。張守節曰:因太王周原,國號曰地理志云:右扶風美陽縣岐山西北中水鄉周太王所邑。括地志云:故周城一名美陽城,在雍州武功縣西北二十五里。紀,理也,統理眾事而系之年月。溫公系年用春秋之法,因本紀而謂之紀。邰,湯來翻。夏,戶雅翻。窋,竹律翻。在雍,於用翻。

威烈王 #

考王之子。諡法:猛以剛果曰威;有功安民曰烈。沈約曰:諸複諡,有諡人,無諡法。

二十三年(戊寅,前四零三) #

上距春秋獲麟七十八年,距左傳趙襄子惎jì智伯事七十一年。惎,毒也,音其冀翻。

1初命‹府新田,山西侯马›大夫 ‹府安邑,山西夏县›‹府晋阳,山西太原›‹府平阳,山西临汾›為諸侯。此溫公書法所由始也。之先,畢公高後,與同姓;其苗裔曰畢萬,始封于,至魏舒,始為正卿;三世至之先,造父後;至叔帶,始自;至趙夙,始封于。至趙盾,始為正卿,六世至之先,出於周武王,至韓武子,封于韓原。至韓厥,為正卿;六世至。三家者,世為大夫,於則陪臣也。室既衰,盟,以尊王室,故命之為伯。三卿竊之權,暴蔑其君,剖分其國,此王法所必誅也。威烈王不惟不能誅之,又命之為諸侯,是崇獎奸名犯分之臣也,通鑑始於此,其所以謹名分歟!

〖译文〗 [1]周威烈王姬午初次分封晋国大夫魏斯、赵籍、韩虔为诸侯国君。

曰:臣聞天子之職莫大於禮,禮莫大於分,分莫大於名。 分,扶問翻;下同。何謂禮?紀綱是也。何謂分?君、臣是也。何謂名?公、侯、卿、大夫是也。

〖译文〗 臣司马光曰:我知道天子的职责中最重要的是维护礼教,礼教中最重要的是区分地位,区分地位中最重要的是匡正名分。什么是礼教?就是法纪。什么是区分地位?就是君臣有别。什么是名分?就是公、侯、卿、大夫等官爵。

夫以四海之廣, 夫以,音扶。兆民之眾,受制於一人,雖有絕倫之力,高世之智,莫【章︰十二行本「莫」下有「敢」字;乙十一行本同;孔本同。】不奔走而服役者,豈非以禮為之紀綱【章︰十二行本,二字互乙;乙十一行本同;孔本同。】哉!是故天子統三公, 統,他綜翻。三公率諸侯,諸侯制卿大夫,卿大夫治士庶人。 治,直之翻。貴以臨賤,賤以承貴。上之使下猶心腹之運手足,根本之制支葉,下之事上猶手足之衛心腹,支葉之庇本根,然後能上下相保而國家治安。 治,直吏翻。故曰天子之職莫大於禮也。

〖译文〗 四海之广,亿民之众,都受制于天子一人。尽管是才能超群、智慧绝伦的人,也不能不在天子足下为他奔走服务,这难道不是以礼作为礼纪朝纲的作用吗!所以,天子统率三公,三公督率诸侯国君,诸侯国君节制卿、大夫官员,卿、大夫官员又统治士人百姓。权贵支配贱民,贱民服从权贵。上层指挥下层就好像人的心腹控制四肢行动,树木的根和干支配枝和叶;下层服侍上层就好像人的四肢卫护心腹,树木的枝和叶遮护根和干,这样才能上下层互相保护,从而使国家得到长治久安。所以说,天子的职责没有比维护礼制更重要的了。

文王序,以為首。孔子系之曰:「天尊地卑,乾坤定矣。 卑高以陳,貴賤位矣。」 系,戶計翻。言君臣之位猶天地之不可易也。春秋抑諸侯,尊王【章︰十二行本「王」作「周」;乙十一行本同;孔本同;退齋校同。】室,王人雖微,序於諸侯之上,以是見聖人於君臣之際未嘗不惓惓也。惓,逵員翻。漢劉向傳:忠臣畎quǎn畝,猶不忘君惓惓之義也。惓惓,猶言勤勤也。非有 ‹姒履癸›、‹子受辛›之暴‹子天乙›、‹姬发›之仁,人歸之,天命之,君臣之分當守節伏死而已矣。是故以微子 ‹子启›而代‹子受辛›成湯‹子天乙›配天矣,史記商帝乙生三子:長曰微子啟,次曰中衍,季曰之母為后。帝乙欲立為太子,太史據法爭之曰:「有妻之子,不可立妾之子。」乃立卒以暴虐亡殷國孔鄭玄義曰:物之大者莫若於天;推父比天,與之相配,行孝之大,莫大於此;所謂「嚴父莫大於配天」也。又孔氏曰:禮記稱萬物本乎天,人本乎祖。俱為其本,可以相配,故王者皆以祖配天。諡法:除殘去虐曰湯。然諡法起于;蓋人先有此號,人遂引以為諡法。分,扶問翻。長,知兩翻。卒,子恤翻。季札而君太伯血食矣, 吳王壽夢有子四人:長曰諸樊,次曰餘祭,次曰餘昩,次曰季札季札賢,壽夢欲立之,季札讓不可,於是立諸樊諸樊卒,以授餘祭,欲兄弟以次相傳,必致國于季札季札終讓而逃之。其後諸樊之子餘昩之子爭國,至於夫差遂以亡。宗廟之祭用牲,故曰血食。太伯立國之君。范寧曰:太者,善大之稱;伯者,長也。周太王之元子,故曰太伯陸德明曰:壽夢,莫公翻。餘祭,側介翻。餘昩,音末。然二子寧亡國而不為者,誠以禮之大節不可亂也。故曰禮莫大於分也。

〖译文〗 周文王演绎排列《易经》,以乾、坤为首位。孔子解释说:“天尊贵,地卑微,阳阴于是确定。由低至高排列有序,贵贱也就各得其位。”这是说君主和臣子之间的上下关系就像天和地一样不能互易。《春秋》一书贬低诸侯,尊崇周王室,尽管周王室的官吏地位不高,在书中排列顺序仍在诸侯国君之上,由此可见孔圣人对于君臣关系的关注。如果不是夏桀、商纣那样的暴虐昏君,对手又遇上商汤、周武王这样的仁德明主,使人民归心、上天赐命的话,君臣之间的名分只能是作臣子的恪守臣节,矢死不渝。所以如果商朝立贤明的微子为国君来取代纣王,成汤创立的商朝就可以永配上天;而吴国如果以仁德的季札做君主,开国之君太伯也可以永享祭祀。然而微子、季札二人宁肯国家灭亡也不愿做君主,实在是因为礼教的大节绝不可因此破坏。所以说,礼教中最重要的就是地位高下的区分。

夫禮,辨貴賤,序親疏,裁群物,制庶事,非名不著,非器不形;名以命之,器以別之, 夫,音扶。別,彼列翻。然後上下粲然有倫,此禮之大經也。名器既亡,則禮安得獨在哉!昔仲叔于奚有功于,辭邑而請繁纓,孔子以為不如多與之邑。惟名與器,不可以假人,君之所司也;政亡則國家從之。 左傳衛孫桓子帥師與師戰於新築‹河北大名南›,師敗績。新築仲叔于奚救孫桓子桓子是以免。既而人賞之邑,辭;請曲縣、繁纓以朝,許之。孔子聞之曰:「不如多與之邑,惟名與器不可以假人。」繁纓,馬飾也。繁,馬鬣上飾;纓,馬膺前飾。晉志註曰:纓在馬膺如索帬。繁,音蒲官翻。纓,伊盈翻。索,昔各翻。 君待孔子而為政,孔子欲先正名,以為名不正則民無所措手足。論語夫繁纓,小物也,而孔子惜之;正名,細務也,而孔子先之: 先,悉薦翻。誠以名器既亂則上下無以相保故也。夫事未有不生於微而成于著,聖人之慮遠,故能謹其微而治之。 治,直之翻;下同。眾人之識近,故必待其著而後救之;治其微則用力寡而功多,救其著則竭力而不能及也。曰:「履霜堅冰至,」初六爻辭。曰:「履霜堅冰,陰始凝也。馴致其道,至堅冰也。」曰:「一日二日萬幾,」皋陶謨之辭。孔安國曰:幾,微也。言當戒懼萬事之微。幾,居依翻。謂此類也。故曰分莫大於名也。 分,扶問翻。

〖译文〗 所谓礼教,在于分辨贵贱,排比亲疏,裁决万物,处理日常事物。没有一定的名位,就不能显扬;没有器物,就不能表现。只有用名位来分别称呼,用器物来分别标志,然后上下才能井然有序。这就是礼教的根本所在。如果名位、器物都没有了,那么礼教又怎么能单独存在呢!当年仲叔于奚为卫国建立了大功,他谢绝了赏赐的封地,却请求允许他享用贵族才应有的马饰。孔子认为不如多赏赐他一些封地,惟独名位和器物,绝不能假与他人,这是君王的职权象征;处理政事不坚持原则,国家也就会随着走向危亡。卫国国君期待孔子为他崐处理政事,孔子却先要确立名位,认为名位不正则百姓无所是从。马饰,是一种小器物,而孔子却珍惜它的价值;正名位,是一件小事情,而孔子却要先从它做起,就是因为名位、器物一紊乱,国家上下就无法相安互保。没有一件事情不是从微小之处产生而逐渐发展显著的,圣贤考虑久远,所以能够谨慎对待微小的变故及时予以处理;常人见识短浅,所以必等弊端闹大才来设法挽救。矫正初起的小错,用力小而收效大;挽救已明显的大害,往往是竭尽了全力 也不能成功。《易经》说:“行于霜上而知严寒冰冻将至。”《尚书》说:“先王每天都要兢兢业业地处理成千上万件事情。”就是指这类防微杜渐的例子。所以说,区分地位高下最重要的是匡正各个等级的名分。

嗚呼!‹姬宫湦shēng›、‹姬胡›失德,周道日衰,綱紀散壞,下陵上替,諸侯專征,齊桓公晉文公悼公以及楚莊王吳夫差之類。大夫擅政,謂晉六卿、魯三家、齊田氏之類。禮之大體什喪七八矣,喪,息浪翻。然文‹姬昌›、武‹姬发›之祀猶綿綿相屬者,屬,聯屬也,音之欲翻。凡聯屬之屬皆同音。蓋以周之子孫尚能守其名分故也。何以言之?昔晉文公‹姬重耳›有大功於王室,請隧於襄王‹姬郑›,襄王不許,曰:「王章也。未有代德而有二王,亦叔父之所惡也。不然,叔父有地而隧,又何請焉!」文公於是懼而不敢違。太叔帶之難,襄王出居於氾fàn‹河南襄城›。晉文公帥師納王,殺太叔帶。既定襄王於郟jiá,王勞之以地,辭;請隧焉,王弗許云云。杜預曰:闕地通路曰隧,此乃王者葬禮也。諸侯皆縣柩而下。王章者,章顯王者異於諸侯。古者天子謂同姓諸侯為伯父、叔父。隧,音遂。惡,烏路翻。難,乃旦翻。氾,音泛。勞,力到翻。闕,其月翻。縣,音玄。柩,其久翻。是故以周之地則不大於曹‹山東定陶›、滕‹山東滕州›,以周之民則不眾於邾‹山东邹县›、莒‹山東莒縣›,曹、滕、邾、莒,春秋時小國。莒,居許翻。然歷數百年,宗主天下,雖以晉、楚、齊、秦之強不敢加者,何哉?徒以名分尚存故也。至於季氏之於魯,田常之于齊,白公之于楚,智伯之于晉,魯大夫季氏,自季友以來,世執魯國之政。季平子逐昭公,季康子逐哀公,然終身北面,不敢篡國。田常,即陳恒。田氏本陳氏;溫公避國諱,改「恒」曰「常」。陳成子得齊國之政,殺闞止,弑簡公,而亦不敢自立。史記世家以陳敬仲完為田敬仲完,陳成子恒為田常,故通鑑因以為據。白公勝殺楚令尹子西、司馬子期,石乞曰:「焚庫弑王,不然不濟!」白公曰:「弑王不祥,焚庫無聚。」智伯當晉之衰,專其國政,侵伐鄰國,于晉大夫為最強;攻晉出公,出公道死。智伯欲并晉而不敢,乃奉哀公驕立之。其勢皆足以逐君而自為,然而卒不敢者,卒,子恤翻,終也。豈其力不足而心不忍哉,乃畏奸名犯分而天下共誅之也。奸,居寒翻,亦犯也。分,扶問翻。今晉大夫暴蔑其君,剖分晉國,史記六國年表:定王十六年,趙、魏、韓滅智伯,遂三分晉國。天子既不能討,又寵秩之,使列於諸侯,是區區之名分復不能守而并棄之也。陸德明經典釋文:凡復字,其義訓又者,并音扶又翻。先王之禮於斯盡矣!

〖译文〗 呜呼!周幽王、周厉王丧失君德,周朝的气数每况愈下。礼纪朝纲土崩瓦解;下欺凌、上衰败;诸侯国君恣意征讨他人;士大夫擅自干预朝政;礼教从总体上已经有十之七八沦丧了。然而周文王、周武王开创的政权还能绵绵不断地延续下来,就是因为周王朝的子孙后裔尚能守定名位。为什么这样说呢?当年晋文公为周朝建立了大功,于是向周襄王请求允许他死后享用王室的隧葬礼制,周襄王没有准许,说:“周王制度明显。没有改朝换代而有两个天子,这也是作为叔父辈的晋文公您所反对的。不然的话,叔父您有地,愿意隧葬,又何必请示我呢?”晋文公于是感到畏惧而没有敢违反礼制。因此,周王室的地盘并不比曹国、滕国大,管辖的臣民也不比邾国、莒国多,然而经过几百年,仍然是天下的宗主,即使是晋、楚、齐、秦那样的强国也还不敢凌驾于其上,这是为什么呢?只是由于周王还保有天子的名分。再看看鲁国的大夫季氏、齐国的田常、楚国的白公胜、晋国的智伯,他们的势力都大得足以驱逐国君而自立,然而他们到底不敢这样做,难道是他们力量不足或是于心不忍吗?只不过是害怕奸夺名位僭犯身分而招致天下的讨伐罢了。现在晋国的三家大夫欺凌蔑视国君,瓜分了晋国,作为天子的周王不能派兵征讨,反而对他们加封赐爵,让他们列位于诸侯国君之中,这样做就使周王朝仅有的一点名分不能再守定而全部放弃了。周朝先王的礼教到此丧失干净!

或者以為當是之時,周室微弱,三晉強盛,三家分晉國,時因謂之「三晉」,猶後之三秦、三齊也。雖欲勿許,其可得乎!是大不然。夫三晉雖強,苟不顧天下之誅而犯義侵禮,則不請於天子而自立矣。不請於天子而自立,則為悖逆之臣,夫,音扶。悖,蒲內翻,又蒲沒翻。天下苟有桓、文之君,必奉禮義而征之。今請於天子而天子許之,是受天子之命而為諸侯也,誰得而討之!故三晉之列于諸侯,非三晉之壞禮,乃天子自壞之也。壞,音怪,人毀之也。

〖译文〗 有人认为当时周王室已经衰微,而晋国三家力量强盛,就算周王不想承认他们,又怎么能做得到呢!这种说法是完全错误的。晋国三家虽然强悍,但他们如果打算不顾天下的指责而公然侵犯礼义的话,就不会来请求周天子的批准,而是去自立为君了。不向天子请封而自立为国君,那就是叛逆之臣,天下如果有像齐桓公、晋文公那样的贤德诸侯,一定会尊奉礼义对他们进行征讨。现在晋国三家向天子请封,天子又批准了。他们就是奉天子命令而成为诸侯的,谁又能对他们加以讨伐呢!所以晋国三家大夫成为诸侯,并不是晋国三家破坏了礼教,正是周天子自已破坏了周朝的礼教啊!

烏呼!君臣之禮既壞矣,此壞,其義為成壞之壞,讀如字。則天下以智力相雄長,長,知兩翻。遂使聖賢之後為諸侯者,社稷無不泯絕,謂齊、宋亡于田氏,魯、陳、越亡于楚,鄭亡于韓也。泯,彌忍翻,盡也,又彌鄰翻。毛晃曰:沒也,滅也。生民之類糜滅幾盡,說文曰:糜,糝sǎn也;取糜爛之義,音忙皮翻。幾,居依翻,又渠希翻,近也。豈不哀哉!

〖译文〗 呜呼!君臣之间的礼纪既然崩坏,于是天下便开始以智慧、武力互相争雄,使当年受周先王分封而成为诸侯国君的圣贤后裔,江山相继沦亡,周朝先民的子孙灭亡殆尽,岂不哀伤!

...

16-18

向bash脚本添加参数 #

basic #

─ ~/shellTest                   ly@vmmin 10:37:24
╰─❯ cat ./16myscript_cls.sh 
#!/bin/bash

echo "You entered the argument: $1,$2,$3, and $4."

结果

╭─ ~/shellTest               16s ly@vmmin 10:37:18
╰─❯ ./16myscript_cls.sh Linux1 Linux2
You entered the argument: Linux1,Linux2,, and .

示例1 #

╭─ ~/shellTest                      ly@vmmin 10:41:45
╰─❯ cat ./16myscript_cls.sh 
#!/bin/bash

ls -lh $1

#echo "You entered the argument: $1,$2,$3, and $4."
╭─ ~/shellTest                        ly@vmmin 10:41:28
╰─❯ ./16myscript_cls.sh /etc
total 792K
-rw-r--r-- 1 root root   3.0K May 25  2023 adduser.conf
-rw-r--r-- 1 root root     44 Dec 17 15:26 adjtime
-rw-r--r-- 1 root root    194 Dec 23 22:38 aliases
drwxr-xr-x 2 root root   4.0K Dec 23 22:38 alternatives
drwxr-xr-x 2 root root   4.0K Dec 17 15:24 apparmor
drwxr-xr-x 8 root root   4.0K Dec 17 15:25 apparmor.d
drwxr-xr-x 9 root root   4.0K Dec 17 15:30 apt
-rw-r----- 1 root daemon  144 Oct 16  2022 at.deny
-rw-r--r-- 1 root root   2.0K Mar 30  2024 bash.bashrc

示例2 #

#!/bin/bash

lines=$(ls -lh $1 | wc -l) #行计数

echo "You hava $(($lines-1)) objects in the $1 directory."
#$(($lines-1))这里用到了子shell

#echo "You entered the argument: $1,$2,$3, and $4."
╭─ ~/shellTest                                 ly@vmmin 10:48:06
╰─❯ ls -lh logfiles 
total 12K
-rw-r--r-- 1 ly ly   0 Dec 22 23:07 a.log
-rw-r--r-- 1 ly ly 120 Dec 22 23:17 a.log.tar.gz
-rw-r--r-- 1 ly ly   0 Dec 22 23:07 b.log
-rw-r--r-- 1 ly ly 121 Dec 22 23:17 b.log.tar.gz
-rw-r--r-- 1 ly ly   0 Dec 22 23:07 c.log
-rw-r--r-- 1 ly ly 121 Dec 22 23:17 c.log.tar.gz
-rw-r--r-- 1 ly ly   0 Dec 22 23:15 xx.txt
-rw-r--r-- 1 ly ly   0 Dec 22 23:15 y.txt
╭─ ~/shellTest                                  ly@vmmin 10:48:10
╰─❯ ./16myscript_cls.sh logfiles
You hava 8 objects in the logfiles directory.

head,表示前十行,可以看出total这些被算作一行了,所以上面的shell中-1

...

12-15

functions 函数 #

update这个脚本为基础编改
作用

  • 减少重复代码
#!/bin/bash

release_file=/etc/os-release
logfile=/var/log/updater.log
errorlog=/var/log/updater_errors.log

check_exit_status(){
    if [ $? -ne 0 ]
    then
        echo "An error occured,please check the $errorlog file."
    fi
}

if  grep -q "Arch" $release_file 
then
    sudo pacman -Syu 1>>$logfile 2>>$errorlog
    check_exit_status
fi

if grep -q "Ubuntu" $release_file ||  grep -q "Debian" $release_file 
then
    sudo apt update 1>>$logfile 2>>$errorlog
    check_exit_status
    #默认yes
    sudo apt dist-upgrade -y 1>>$logfile 2>>$errorlog
    check_exit_status
fi

CaseStatements #

脚本 #

╭─ ~/shellTest                                                              ly@vmmin 22:32:52
╰─❯ cat ./13myscript_cls.sh 
#!/bin/bash

finished=0

while [ $finished -ne 1 ]
do
    echo "What is your favorite Linux distribution?"
    
    echo "1 - Arch"
    echo "2 - CentOS"
    echo "3 - Debian"
    echo "4 - Mint"
    echo "5 - Something else.."
    echo "6 - exit"
    
    read distro;
    case $distro in 
      1) echo "Arch is xxx";;
      2) echo "CentOS is xbxxx";;
      3) echo "Debian is bbbxx";;
      4) echo "Mint is xxxxsss";;
      5) echo "Something els.xxxxx";;
      6) finished=1
         echo "now will exit"
         ;;
      *) echo "you didn't enter an xxxx choice."
    esac
done

echo "Thanks for using this script."

脚本执行 #

╭─ ~/shellTest                                                              ly@vmmin 22:32:11
╰─❯ ./13myscript_cls.sh   
What is your favorite Linux distribution?
1 - Arch
2 - CentOS
3 - Debian
4 - Mint
5 - Something else..
6 - exit
3
Debian is bbbxx
What is your favorite Linux distribution?
1 - Arch
2 - CentOS
3 - Debian
4 - Mint
5 - Something else..
6 - exit
u
you didn't enter an xxxx choice.
What is your favorite Linux distribution?
1 - Arch
2 - CentOS
3 - Debian
4 - Mint
5 - Something else..
6 - exit
6
now will exit
Thanks for using this script. 

ScheduleJobs #

作用 #

脚本在特定时间运行

...

07-10

WhileLoops #

范例 #

#!/bin/bash

myvar=1
#小于或者等于10
while [ $myvar -le 10 ]
do
    echo $myvar
    myvar=$(( $myvar + 1  ))
    sleep 0.5
done

运行

╭─ ~/shellTest                              ≡ ly@vmmin 12:10:33
╰─❯ ./71myscript_cls.sh 
1
2
3
4
5
6
7
8
9
10

数字会每隔0.5s就输出一次
对于myvar=$(( $myvar + 1 ))$((expression))形式表示算数运算,而且其中的空格是可以省略的

范例2 #

#!/bin/bash

while [ -f ~/testfile ]
do
    echo "As of $(date),the test file exists."
    sleep 5
done

echo "As of $(date), the test ....has gone missing."

用来测试文件是否存在,运行前先新建一下文件touch ~/testfile 运行一会后把文件删除,如图

...

06ExitCode

意义 #

用来确定代码是否执行成功

例子 #

ls -l /misc
echo $? #输出2
ls -l ~
echo $? #输出0

$?用来显示最近一个命令的状态,零表示成功,非零表示失败

#!/bin/bash
#这个例子之前,作者用 sudo apt remove htop 命令把htop删除了
package=htop
sudo apt install $package

echo "The exit code for ....is $?"

安装完毕后显示返回0

另一个示例

#!/bin/bash

package=notexist
sudo apt install $package

echo "The exit code for ....is $?"
#执行后显示
#Reading package lists... Done
#Building dependency tree... Done
#Reading state information... Done
#E: Unable to locate package notexist
#The exit code for ....is 100

配合if语句 #

基本功能 #

#!/bin/bash

package=htop
sudo apt install $package

if [ $? -eq 0 ]
then
    echo "The installation of $package success..."
    echo "new comman here:"
    which $package
else
    echo "$package failed ..."
fi 

之前前作者用sudo apt remove htop又把htop删除了,不过其实不删除也是走的 echo "The installation of ....."这个分支
结果:

...

05If

在shell中,零为真,非零为假。

if then fi #

mynum=200

#[和]前后都要有空格
if [ $mynum -eq 200 ]
then
    echo "The condition is true."
fi


编辑之后,按ctrl + O 保存文件
ctrl + T + Z 保持在后台,fg+回车 恢复

#!/bin/bash

mynum=200

#[和]前后都要有空格
if [ $mynum -eq 200 ]
then
    echo "The condition is true."
fi

if [ $mynum -eq 300 ]
then
    echo "The variable does not equal 200."
fi

else if #

#!/bin/bash

mynum=300

#[和]前后都要有空格
if [ $mynum -eq 200 ]
then
    echo "The condition is true."
else
    echo "The variable does not equal>
fi

...

01-04

意义 #

执行一系列命令

视频框架 #

  1. 介绍,欢迎
  2. HelloWorld
  3. 变量
  4. 数学函数
  5. if语句
  6. 退出代码
  7. while循环
  8. 更新脚本,保持服务器最新状态
  9. for循环
  10. 脚本应该存储在文件系统哪个位置
  11. 数据流,标准输入、标准输出、标准错误输出
  12. 函数
  13. case语句
  14. 调度作业(SchedulingJobs)Part1
  15. 调度作业(SchedulingJobs)Part2
  16. 传递参数
  17. 备份脚本

准备 #

需要一台运行Linux系统的计算机(或虚拟机)

一些基本操作 #

新建或编辑脚本 #

nano myscript.sh

内容 #


ctrl + o 保存,ctrl + x 退出

如何执行脚本 #

权限 #

#给脚本赋予执行的权限
sudo chmod +x myscript.sh

执行 #

执行前查看权限 #

运行 #

./myscript.sh

查看脚本 #

cat myscript.sh

更多语句的脚本 #

ls
pwd

输出

...

基础

环境 #

  • 使用视频作者给出的示例,https://github.com/CoreyMSchafer/code_snippets/tree/master/Regular-Expressions
  • 使用sublimeText打开的文件,ctrl+f时要确认勾选正则及区分大小写

simple.txt-基础操作 #

直接搜索 #

任意字符 #


这里默认不会显示所有,点击findAll才会出来

有些字符需要加反斜杠转义,比如 . (点)以及 \ (斜杠本身) #

/////,从左到右,和书写方向一致的叫做(正)斜杠。
反之,叫做反斜杠 \


一些元字符 #

.       - Any Character Except New Line 除了换行符的任意字符
\d      - Digit (0-9) 数字
\D      - Not a Digit (0-9) 非数字
\w      - Word Character (a-z, A-Z, 0-9, _) 单词字符,大小写字母+数字+下划线
\W      - Not a Word Character 非单词字符
\s      - Whitespace (space, tab, newline) 空白字符,空格+tab+换行符
\S      - Not Whitespace (space, tab, newline) 非空白字符

\b      - Word Boundary 边界字符-单词边界
\B      - Not a Word Boundary 非单词边界(没有单词边界)
^       - Beginning of a String
$       - End of a String

[]      - Matches Characters in brackets
[^ ]    - Matches Characters NOT in brackets
|       - Either Or
( )     - Group

Quantifiers:
*       - 0 or More
+       - 1 or More
?       - 0 or One
{3}     - Exact Number
{3,4}   - Range of Numbers (Minimum, Maximum)


#### Sample Regexs ####

[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+

边界字符 #

...