Linux學(xué)習(xí)日記——BASH

一泉蝌、認識BASH


????BASH是目前Linux系統(tǒng)應(yīng)用最多的shell,也是大多數(shù)Linux系統(tǒng)默認的shell.

shell是操作系統(tǒng)的接口,它的地位如下圖:

使用shell的幾個好處:

命令行界面的shell:大家都一樣歇万。幾乎各家distribution使用的bash都是一樣的。這樣你可以隨意轉(zhuǎn)換不同的distribution勋陪。

遠程管理:命令行較快贪磺。速度快而且不太會出現(xiàn)短線或者信息外流的問題。

bash是GNU計劃中重要的計劃之一诅愚,目前也是distributions的標準shell寒锚。bash的優(yōu)點有:

?????命令記憶功能:(history)在命令行中使用上下箭頭鍵就可以找到前/后一個輸入的命令;

????命令與文件補全功能:[Tab]鍵補全违孝。[Tab]接在一串命令的第一個字后面刹前,則為命令補全;[Tab]接在一串命令的第二個字以后時雌桑,為文件補齊喇喉。在bash shell下不妨多按幾次[Tab]鍵。

????命令別名設(shè)置筹燕。 alias lm = 'ls -al'

????程序腳本

????通配符 * 的使用.

二轧飞、shell的變量功能

變量的取用 echo


變量設(shè)定規(guī)則

1. 變量與內(nèi)容以一個等號 [=] 來連接,如下所示:

? ? ?[myname=VBird]

2. 等號兩邊不能直接空格符撒踪,如下所示為錯誤:

? ? ?[myname = VBird] 或 [myname=VBird Tsai]

3. 變量名稱只能是英文字母與數(shù)字,但是開頭字符不能是數(shù)字制妄,如下為錯誤:

? ? ?[2myname=VBird]

4. 變量內(nèi)容若有空格符可使用雙引號["]或單引號[']將變量內(nèi)容結(jié)合起來掸绞,但

雙引號內(nèi)的特殊字符如$等,可以保有原來的特性,如下所示:

[var="lang is $LANG"] 則 [echo $var] 可得 [lang is zh_TW.UTF-8]

單引號內(nèi)的特殊字符則僅為一般字符(純文本)衔掸,如下所示:

? ? ? ? ?[var='lang is $LANG'] 則 [echo $var] 可得 [lang is $LANG]

5. 可用跳脫字符[ \ ]將特殊符號(如 [Enter]烫幕,$,\敞映,空格符较曼,'等)變成一般字符,如:

? ? ?[myname=VBird\ Tsai]

6. 在一串指令的執(zhí)行中振愿,還需要籍由其他額外的指令提供的信息時捷犹,可以使用反單引號[`指令`]或[$(指令)]。

特別注意冕末,那個 ` 是鍵盤上方的數(shù)字鍵 1 左邊那個按鍵萍歉,而不是單引號!例如想要取得核心版本的設(shè)定:

? ? ?[version=$(uname -r)] 再 [echo $version] 可得 [3.10.0-229.e17.x86_64]

7. 若該變量為擴增變量內(nèi)容時档桃,則可用 “$變量名稱” 或 ${變量} 累加內(nèi)容枪孩,如下所示:

? ? ?[PATH="$PATH":/home/bin] 或 [PATH=${PATH}:/home/bin]

8. 若該變量需要在其他子程序執(zhí)行,則需要以 export 來使變量變成環(huán)境變量:

? ? ?[export PATH]

9. 通常大寫字符為系統(tǒng)默認變量藻肄,自行設(shè)定變量可以使用小寫字符蔑舞,方便判斷(純粹依照使用者興趣與嗜好);

10.取消變量的方法為使用 unset : [uset 變量名稱] 例如取消 myname 的設(shè)定:

[unset myname]

環(huán)境變量

set:顯示(設(shè)置)shell變量 包括的私有變量以及用戶變量嘹屯,不同類的shell有不同的私有變量 bash,ksh,csh每中shell私有變量都不一樣

env:顯示(設(shè)置)用戶變量變量

export:顯示(設(shè)置)當前導(dǎo)出成用戶變量的shell變量斗幼。


shell(這里指bash)的初始化過程是這樣的:

1.bash檢查文件/etc/profile是否存在

2.如果存在,bash就讀取該文件呆馁,否則桐经,跳過

3.bash檢查主目錄下的文件.bash_profile是否存在。

4.如果存在浙滤,bash就讀取該文件阴挣,否則纺腊,跳過

5.bash檢查主目錄下的.bash_login是否存在揖膜。

6.如果存在,bash就讀取該文件壹粟,否則拜隧,跳過

7.bash檢查主目錄下的文件.profile是否存在

8.如果存在干奢,bash就讀取該文件,否則,跳過佑稠。

這些步驟都執(zhí)行完后旗芬,就出現(xiàn)提示符了舌胶,ksh默認提示符是$.

所以可以通過更改相關(guān)文件里的配置設(shè)置你的環(huán)境變量.

變量讀取、數(shù)組疮丛、宣告

變量內(nèi)容的刪除與替換


三幔嫂、bash shell操作環(huán)境

bash shell對指令的搜尋順序:

1.以相對/絕對路徑運行命令,例如『 /bin/ls 』或『 ./ls 』誊薄;

2.由 alias 找到該命令來運行履恩;

3.由 bash 內(nèi)建的 (builtin) 命令來運行;

4.透過 $PATH 這個變量的順序搜尋到的第一個命令來運行呢蔫。

通過type命令查看命令搜尋順序似袁,例如:type -a vi


. bash 也有進站畫面與歡迎訊息.在終端機接口 (tty1 ~ tty6) 登入的時候,會有幾行提示的字符串,那就是進站畫面. 那個字符串寫在 /etc/issue 里面.

如果想要讓使用者登入后取得一些訊息昙衅,例如想要讓大家都知道的訊息扬霜, 那么可以將訊息加入 /etc/motd里面去!例如:當?shù)侨牒蠖妫嬖V登入者著瓶, 系統(tǒng)將會在某個固定時間進行維護工作,可以這樣做:?

linux-peej:~ # vi /etc/motd?

Hello everyone, Our server will be maintained at 2015/06/28 0:00 ~ 24:00. Please don't login server at that time.?

那么當你的使用者(包括所有的一般賬號與 root)登入主機后啼县,就會顯示這樣的訊息出來:

Last login: Sat Jun 28 11:20:16 2015 from 192.168.137.1?

Hello everyone, Our server will be maintained at 2009/02/28 0:00 ~ 24:00. Please don't login server at that time.?


終端機的環(huán)境設(shè)定



四材原、數(shù)據(jù)流重導(dǎo)向

將命令執(zhí)行后的數(shù)據(jù)輸出到指定地方


/dev/null? 是可以當垃圾桶用的文件,可以將不需要的錯誤輸出重定向到此文件,這些信息將會自動清除.

如果將正確和錯誤信息都寫入文件,需要特殊寫法:


命令執(zhí)行判斷依據(jù)

&&

? ? ? cmd1 && cmd2

? ? ? 若cmd1執(zhí)行完畢且正確執(zhí)行($?=0),則開始執(zhí)行cmd2

? ? ? 若cmd2執(zhí)行完畢且為錯誤($? !=0)季眷,則cmd2不執(zhí)行

||

? ? ? cmd1 || cmd2

? ? ? 若cmd1執(zhí)行完畢且正確執(zhí)行($?=0)余蟹,則cmd2不執(zhí)行

? ? ? 若cmd2執(zhí)行完畢且為錯誤($? !=0),則開始執(zhí)行cmd2

分號子刮;

? ? ? ?cmd;cmd

? ? ? ?多條命令順序執(zhí)行威酒,執(zhí)行順序是從左到右的順序。

()運算符:

為了在當前shell中執(zhí)行一組命令挺峡,可以用命令分隔符(即",")隔開每一個命令葵孤,并把所有的命令用圓括號()括起來。


{}運算符:

如果使用{}來代替()橱赠,那么相應(yīng)的命令將在子shell而不是當前shell中作為一個整體被執(zhí)行尤仍,只有在{}中所有命令的輸出作為一個整體被重定向時,其中的命令才被放到子shell中執(zhí)行狭姨,否則在當前shell執(zhí)行宰啦。

command1 && command2 || command3

? ? ? 如果command1執(zhí)行正確,則執(zhí)行command2

? ? ? 如果command1執(zhí)行為錯誤饼拍,則執(zhí)行command3


五绑莺、管線命令

擷取命令

排序命令

tee(雙向重定向)

管道符或者“>”操作符都是單向的數(shù)據(jù)流,為了在數(shù)據(jù)流處理的國中將某段信息保存到文件惕耕,同時希望這個數(shù)據(jù)流繼續(xù)輸出到后續(xù)的命令纺裁,那么tee就是為了完成這樣的工作情景。


Linux中常用的字符轉(zhuǎn)換命令有:tr,col,join,paste,expand司澎。

(1)tr:可以用來刪除一段信息當中的文字欺缘,或者是進行文字信息的轉(zhuǎn)換。

a)tr 'SET1' 'SET2'?tr的默認操作是替換, 作用是把標準輸入中含有的SET1中的字符依次換成SET2中對應(yīng)的字符挤安。

例如:echo "Hello, Kevin" | tr 'a-z' 'A-Z'

輸出結(jié)果是:HELLO,KEVIN

例如:echo "Hello, Kevin" | tr 'he' 'XX'

輸出結(jié)果是:HXllo, KXvin

b) tr -d SET1 當tr帶有-d參數(shù)的時候表示刪除標準輸入中所有在SET1 中出現(xiàn)的字符谚殊。

例如:echo “Hello, Kevin” | tr -d 'a-z'

輸出結(jié)果是:H, K上述語句的作用就是刪除了標準輸入中的所有小寫字母。

c) tr -s SET1 當tr帶有-s參數(shù)的時候表示替換掉標準輸入中在SET1中重復(fù)出現(xiàn)的字符蛤铜,只保留一個嫩絮。

例如: echo "Hello, Kevin" | tr -s 'a-z'

輸出結(jié)果是:Helo, Kevin 結(jié)果中刪除重復(fù)出現(xiàn)的l只保留了一個丛肢。

(2) col:在許多UNIX說明文件里,都有RLF控制字符剿干。當我們運用shell特殊字符">"和">>"蜂怎,把說明文件的內(nèi)容輸出成純文本文件時,控制字符會變成亂碼置尔,col指令則能有效濾除這些控制字符杠步。

a)col -b過濾掉所有的控制字符,包括RLF和HRLF榜轿。

? ?b)col -x 將tab建換成對等的空格鍵

(3)join: 它處理兩個文件之間的數(shù)據(jù)幽歼,主要是將兩個文件中有相同數(shù)據(jù)的行合并在一起。要注意的是在使用join之前谬盐,索要處理的兩個文件應(yīng)當是經(jīng)過排序的甸私,否則有些對比的項目會被略過。

-t:分段的分隔符飞傀。 join默認以空格符分隔數(shù)據(jù)皇型,并且對比“第一個字段”的數(shù)據(jù),如果兩個文件相同助析,則將兩條數(shù)據(jù)連城一行,且第一個字段放在第一個椅您。

-i: 忽略大小寫的差異外冀。

-1: 數(shù)字1后面代表的是第一個文件用哪個字段來分析

?-2:數(shù)字2后面代表的是第二個文件用哪個字段來分析

例如:test1中有如下數(shù)據(jù):

Kevin 100

Luna 100

Max 100

John 100

test2中有如下數(shù)據(jù):

Luna 10

John 20

Max 30

Kevin 40

分別將test1和test2排序并保存在test1_s和test2_s中,然后用join對兩個文件進行處理:join test1 test2 獲得以下結(jié)果:

John 120

Kevin 140

Luna 110

Max 130

(4)paste: 直接將兩個文件中具有相同數(shù)據(jù)的行貼在一起掀泳,且中間以tab建隔開雪隧。

-d: 后面可以接分隔符,默認是以tab來分隔的

- :如果file部分寫成-员舵,表示數(shù)據(jù)來自stdin

還是按照上面的例子對于排序后的test1_s和test2_s用paste進行處理 paste -d ' ' test1_s test2_s將獲得以下結(jié)果:

John 100 John 20

Kevin 100 Kevin 40

Luna 100 Luna 10

Max 100 Max 30

(5)expand: 將tab轉(zhuǎn)換成空格鍵脑沿。

-t : 后面可以接數(shù)字,自定義一個tab按鍵代表多少個字符马僻。

參數(shù)代換 xargs


減號"-"用途


替代stdin和stdout.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庄拇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子韭邓,更是在濱河造成了極大的恐慌措近,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件女淑,死亡現(xiàn)場離奇詭異瞭郑,居然都是意外死亡,警方通過查閱死者的電腦和手機鸭你,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門屈张,熙熙樓的掌柜王于貴愁眉苦臉地迎上來擒权,“玉大人,你說我怎么就攤上這事阁谆√汲” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵笛厦,是天一觀的道長纳鼎。 經(jīng)常有香客問我,道長裳凸,這世上最難降的妖魔是什么贱鄙? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮姨谷,結(jié)果婚禮上逗宁,老公的妹妹穿的比我還像新娘。我一直安慰自己梦湘,他們只是感情好瞎颗,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捌议,像睡著了一般哼拔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓣颅,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天倦逐,我揣著相機與錄音,去河邊找鬼宫补。 笑死檬姥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的粉怕。 我是一名探鬼主播健民,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贫贝!你這毒婦竟也來了秉犹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤稚晚,失蹤者是張志新(化名)和其女友劉穎凤优,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜈彼,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡筑辨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了幸逆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棍辕。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡暮现,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楚昭,到底是詐尸還是另有隱情栖袋,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布抚太,位于F島的核電站塘幅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尿贫。R本人自食惡果不足惜电媳,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庆亡。 院中可真熱鬧匾乓,春花似錦、人聲如沸又谋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彰亥。三九已至咧七,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間任斋,已是汗流浹背继阻。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仁卷,地道東北人穴翩。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓犬第,卻偏偏與公主長得像锦积,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子歉嗓,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容