Linux學習筆記(三、Shell基礎)

一、Shell概述

1. Shell是什么?

  • Shell是一個命令行解釋器,它為用戶提供了一個向Linux內核發送請求以便運行程序的界面系統級程序,用戶可以用Shell來啟動、掛起、停止甚至是編寫一些程序。
  • Shell還是一個功能相當強大的編程語言,易編寫,易調試,靈活性較強。Shell是解釋執行的腳本語言,在Shell中可以直接調用Linux系統命令。

課外參考文章: 編譯執行和解釋執行的區別

Paste_Image.png

2. Shell的分類

  • Bourne Shell: 是 UNIX 最初使用的 shell,并且在每種 UNIX 上都可以使用, 在 shell 編程方面相當優秀,但在處理與用戶的交互方面做得不如其他幾種shell。

  • C Shell: C Shell主要在BSD版的Unix系統中使用,其語法與C語言相類似而得名。

  • Shell的兩種主要語法類型有Bourne Shell和C Shell,這兩種語法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括csh、tash。

  • Bash:Bourne Again shell,它是 Bourne shell 的擴展,簡稱 Bash,與 Bourne shell 完全向后兼容,并且在Bourne shell 的基礎上增加、增強了很多特性。Bash放在/bin/bash中,它有許多特色,可以提供如命令補全、命令編輯和命令歷史表等功能,它還包含了很多 C shell 和 Korn shell 中的優點,有靈活和強大的編程接口,同時又有很友好的用戶界面。

    • 查看我們當前使用的Shell:


      Paste_Image.png
    • 查看Bash兼容哪些Shell:vi /etc/shells


      Paste_Image.png
    • 切換不同的Shell(實際上是每切換一個就新增了一個shell。):


      Paste_Image.png
    • 退出Shell:


      Paste_Image.png

二、腳本執行方式

腳本,是使用一種特定的描述性語言,依據一定的格式編寫的可執行文件,又稱作宏或批處理文件。

1. echo 輸出命令

echo [選項] [輸出內容]
選項:
      -e 支持反斜線控制的字符轉換

控制字符表:

| 控制字符| 作用 |
| ------------- |:-------------:| -----:|
| \a | 輸出警告音 |
| \b | 退格鍵,也就是向左刪除鍵 |
| \n | 換行符 |
| \r | 回車鍵 |
| \t | 制表符,也就是Tab鍵 |
| \v | 垂直制表符 |
| \0nnn | 按照八進制ASCII碼表輸出字符。其中0為數字0,nnn是三位八進制數 |
| \xhh | 按照十六進制ASCII碼表輸出字符。 其中hh是兩位十六進制數|
| \e[1;……\e[0m |輸出顏色,可選:30m 黑色、31m 紅色、32m 綠色、33m 黃色、34m 藍色、35m 洋紅、36m 青色、37m 白色|
下面實驗:
1. \a
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/3087800-7d5449a015e3d4aa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2. \b

Paste_Image.png

發現\b放在字符串末尾是無效的
Paste_Image.png

3. \n
Paste_Image.png

4. \r
Paste_Image.png

5. \t
Paste_Image.png

6. \v
Paste_Image.png

7. \0nnn
參考:ASCII碼表
Paste_Image.png

Paste_Image.png

8. \xhh
Paste_Image.png

9. \e[1;……\e[0m
Paste_Image.png

2. 第一個腳本

1. vim(vim是vi的增強版,完全兼容vi的所有功能) xxx.sh 創建腳本文件xxx.sh
2. 進入vim編輯器,開頭聲明:
#!/bin/bash
3. echo -e "內容……"

linux——vi和vim的區別

我的XShell無法輸入小盤的數字,有同樣問題者,戳這里:xshell無法使用小鍵盤區輸入數字

Paste_Image.png

3. 腳本執行

賦予執行權限,直接運行
   chmod 755 xxx.sh  
   ./xxx.sh
通過Bash調用執行腳本(無需賦予權限)
    bash xxx.sh
Paste_Image.png

三、Bash基本功能

** 1. 命令別名與快捷鍵**

別名,正式的或規范的名稱以外的名稱,一種事物在通常的名稱之外還有另外的一種名稱,有地方稱之為昵稱,也有地方稱之為小名。

  • 查看與設定別名
alias
查看系統中所有命令的別名
Paste_Image.png

其中:

alias cp='cp -i' 中-i是用來提示是否覆蓋不同節點的同名文件的。其他幾個原命令中帶-i也是同理。
Paste_Image.png
alias 別名 = '原命令'
設定命令別名(系統重啟后失效)
Paste_Image.png

Paste_Image.png
  • 別名永久生效和刪除別名
vi 用戶的家目錄/.bashrc 例如:vi ~/.bashrc
寫入環境變量配置文件

那么下邊將我之前設置的新的ll別名,寫入到我(root用戶)的環境變量配置文件。


Paste_Image.png

Paste_Image.png

設置完成后,下次重新登錄,這個別名就會永久生效了!??!那么。如果我想讓它直接生效呢?

source 用戶的家目錄/.bashrc
立即使/.bashrc內容生效!
Paste_Image.png
unalias 別名
刪除別名(是臨時刪除,下次系統重啟后還會存在。要想徹底刪除,需要去.bashrc文件中刪除指定的別名,就會永久刪除)
Paste_Image.png
  • 命令生效順序
    我想有很多小伙伴跟我有一樣的疑惑,剛才查看命令別名的時候,有很多別名和原命令是一樣的,例如:alias cp='cp -i',都是cp,那么執行順序是怎樣的呢?

    • 第一順位執行用絕對路徑或相對路徑執行的命令
      (路徑絕對是第一位的)
    • 第二順位執行別名
      (這就解釋了上邊的疑惑,同名,會先執行別名)
    • 第三順位執行Bash的內部命令
      (例如cd,就是使用whereis找不到bin文件的,即代表是內部命令)
    • 第四順位執行按照$PATH環境變量定義的目錄查找順序找到的第一個命令
      (除了內部命令,其他命令我們都需要到$PATH環境變量定義的目錄中查找的)
  • 常用快捷鍵

    • ctrl+c 強制終止當前命令
      (例如,ping ip時,數據一直增加,這時就可以使用ctrl+c終止此次ping)
    • ctrl+l 清屏
    • ctrl+a 光標移動到命令行首(輸入了很長的命令,使用ctrl+a可以使光標移動到這行命令的第一個字符的位置)
    • ctrl+e 光標移動到命令行尾
    • ctrl+u 從光標所在位置刪除到行首(其實就是刪除整行命令)
    • ctrl+z 把命令放入后臺(例如ping ip時顯示數據,懶得看,可以把它放入后臺。不過還是要謹慎使用哦)
    • ctrl+r 從歷史命令中搜索

ctrl+r不好用文字描述,截個圖看吧:


Paste_Image.png

** 2. 歷史命令**

  • 歷史命令
history [選項] [歷史命令保存文件]
選項:
    -c 清空歷史命令
    -w 把緩存中的歷史命令同步到歷史命令保存文件~/.bash_history(會覆蓋之前保存的歷史命令,而不是追加)
  1. 查看歷史命令


    Paste_Image.png
  2. 清空歷史命令并同步到歷史命令保存文件(歷史命令,最好不要清空,如果遇到問題,可以幫助排錯)


    Paste_Image.png
歷史命令會默認保存1000條,可以在環境變量配置文件/etc/profile中進行修改。
Paste_Image.png

Paste_Image.png
  • 歷史命令的調用
    • 使用上、下箭頭調用以前的歷史命令
    • 使用“!n”重復執行第n條歷史命令
    • 使用"!!"重復執行上一條命令
    • 使用"!字串"重復執行最后一條以該字串開頭的命令

使用“!n”重復執行第5條歷史命令:


Paste_Image.png

使用"!!"重復執行上一條命令:


Paste_Image.png

使用"!字串"重復執行最后一條以該字串開頭的命令:
Paste_Image.png
  • 命令與文件補全
    • 在Bash中,命令與文件補全是非常方便與常用的功能,我們只要在輸入命令或文件時,按“Tab”鍵就會自動進行補全。

** 3. 輸入輸出重定向**

  • 標準輸入輸出
設備 設備文件名 文件描述符 類型
鍵盤 /dev/stdin 0 標準輸入
顯示器 /dev/sdtout 1 標準輸出
顯示器 /dev/sdterr 2 標準錯誤輸出
  • 輸出重定向
    linux中使用重定向符號可以實現輸出輸入重定向,默認條件下,標準輸出和錯誤輸出都是終端,用重定向符號可以把標準輸出和錯誤內容進行重定向,例如把標準輸出重定向到文件。

為什么需要重定向呢?
舉個例子。假如一個命令正在運行的時候,沒有人在電腦跟前,那么就可以把它的結果重定向到文件中,等有人的時候直接看文件中保存的數據就好了。

類型 符號 作用
標準輸出重定向 命令 > 文件 以覆蓋的方式,把命令的正確輸出輸出到指定的文件或設備當中。
同上 命令 >> 文件 以追加的方式,把命令的正確輸出輸出到指定的文件或設備當中。
標準錯誤輸出重定向 錯誤命令 2>文件 以覆蓋的方式,把命令的錯誤輸出輸出到指定的文件或設備當中。
同上 錯誤命令 2>>文件 以追加的方式,把命令的錯誤輸出輸出到指定的文件或設備當中。
正確輸出和錯誤輸出同時保存 命令 >文件 2>&1 以覆蓋的方式,把正確輸出和錯誤輸出都保存到同一文件當中。
同上 命令 >>文件 2>&1 以追加的方式,把正確輸出和錯誤輸出都保存到同一文件當中。
同上 命令 &> 文件 以覆蓋的方式,把正確輸出和錯誤輸出都保存到同一文件當中。
同上 命令 &>> 文件 以追加的方式,把正確輸出和錯誤輸出都保存到同一文件當中。
同上 命令 >> 文件1 2>>文件2 把正確輸出追加到文件1中,把錯誤輸出追加到文件2中。

備注:此處的文件如果不存在那么創建,存在就覆蓋或者追加。

標準輸出重定向,覆蓋——命令 > 文件:

Paste_Image.png

標準輸出重定向,追加——命令 >> 文件:
Paste_Image.png

標準錯誤輸出重定向,覆蓋——命令 2> 文件:
Paste_Image.png

標準錯誤輸出重定向,追加——命令 2>> 文件:
Paste_Image.png

正確輸出和錯誤輸出同時保存,追加——【命令 >> 文件 2>&1】和【命令 &>> 文件】效果是一樣的:
Paste_Image.png

把正確輸出追加到文件1中,把錯誤輸出追加到文件2中,命令 >> 文件1 2>>文件2:
Paste_Image.png

  • ** 輸入重定向**

| 類型| 符號 | 功能 |
| ------------- |:-------------:| :-----:| :-----:|
|標準輸入 |命令 < 文件 |命令把文件的內容作為標準輸入|
|標識符限定輸入 | 命令 << 標識符 |命令從標準輸入中讀入內容,直到遇到標識符位置|
|輸入輸出重定向| 命令 < 文件 > 文件2 |命令以文件1作為標準輸入,以文件2作為標準輸出|

Linux系統中的wc(Word Count)命令的功能為統計指定文件中的字節數、字數、行數,并將統計結果顯示輸出。

wc [選項] [文件名]
選項:
    -c 只統計字節數
    -w 只統計單詞數(只要字符之間有空格,就認識是一個單詞)
    -l 只統計行數

操作步驟:
輸入wc → 回車 → 輸入內容 → Ctrl+D


Paste_Image.png
wc < 文件 
命令把文件的內容作為標準輸入并統計
Paste_Image.png
wc << 標識符
>…… 
>標識符
把標識符之間的內容作為命令的輸入并統計
Paste_Image.png

** 4. 管道符**

  • 多命令順序執行

| 多命令執行符| 格式 | 作用 |
| ------------- |:-------------:| :-----:| :-----:|
|; |命令1 ; 命令2|多個命令順序執行,命令之間沒有任何邏輯關系|
|&& | 命令1&&命令2 |邏輯與。當命令1正確執行,命令2才會執行。命令1執行不正確,不執行命令2|
|||| 命令1||命令2 |邏輯或。當命令1執行正確,則命令2不執行。當命令1執行不正確,則命令2執行|

多個命令順序執行,命令之間沒有任何邏輯關系——【;】


Paste_Image.png

邏輯與。當命令1正確執行,命令2才會執行。命令1執行不正確,不執行命令2——【&&】


Paste_Image.png

邏輯或。當命令1執行正確,則命令2不執行。當命令1執行不正確,則命令2執行——【||】
Paste_Image.png

綜合邏輯與和邏輯或:


Paste_Image.png
  • 管道符
命令1|命令2
命令1的正確輸出作為命令2的操作對象

先查處出家目錄下所有文件,然后作為命令2的操作對象,查出小于4k大于1k的文件并詳細展示:


Paste_Image.png

查出當前所有的網絡連接:
以下是網絡端口的訪問情況,數據很長,暫且就截這么點吧


Paste_Image.png

其中,有一條是這樣的,其他狀態時LISTEN,代表端口被監聽中。這條ESTABLISHED,代表正在連接這個端口。


Paste_Image.png

22端口是誰呢?
Paste_Image.png

當然是現在正在進行遠程連接的Xshell了!

通過管道符查詢當前鏈接linux的客戶端:


Paste_Image.png

增強,通過管道符查詢當前鏈接linux的客戶端的人數:
Paste_Image.png

** 5. Shell中通配符**

  • 通配符
通配符 作用
? 匹配一個任意字符
* 可以匹配0個或多個任意字符
[] 匹配中括號中任意一個字符。
[-] 匹配中括號中任意一個字符。-代表一個范圍。例如[a-z],代表可以匹配a-z之間的任意一個字符
[ ^ ] 邏輯非,表示匹配不是中括號內的一個字符。例如[^0-9],代表匹配一個不是數字的字符

一般用在文件名稱的匹配和目錄的匹配。

  • Bash中的其他符號
符號 作用
' ' 單引號。在單引號中所有的特殊符號,都沒有特殊含義。
"" 雙引號。在雙引號中所有的特殊符號,都沒有特殊含義。但是“$”、“`”、“\”是例外,擁有“調用變量的值”、“引用命令”和“轉義符”的特殊含義。
`` 反引號。反引號括起來的內容是系統命令,在Bash中會先執行它。和$()作用一樣,不過推薦使用$(),因為反引號非常容易看錯。
$() 和反引號作用一樣,用來引用系統命令。
# 在Shell腳本中,#號開頭的行代表注釋
$ 用于調用變量的值,如需要調用變量name的值時,需要用$name的方式得到變量的值。
轉義符。跟在\后面的特殊符號將失去特殊意義,變為普通字符。如$將輸出$符號,而不是當作變量引用

這個例子,用到了單引號、雙引號、反引號、$()、$變量名:


Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容