Linux 筆記分享四:Shell 基礎

yuanshang發表於2019-01-03

1、Shell是什麼

Shell是一個命令列直譯器,它為使用者提供了一個向Linux核心傳送請求以便執行程式的介面系統級程式,使用者可以用Shell來啟動、掛起、停止甚至是編寫一些程式

Shell還是一個功能相當強大的程式語言,易編寫,易除錯,靈活性較強。Shell是解釋執行的指令碼語言,在Shell中可以直接呼叫Linux系統命令

Shell將英文字元轉換成二進位制,依據ASCII字碼表

2、Shell的分類

  • Bourne Shell

Bourne Shell: 從1979年起Unix就開始使用Bourne Shell,Bourne Shell的主檔名為sh

此Shell版本比較老,不支援歷史命令

Linux現使用的是此版本的升級版

  • C Shell

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

  • 分類總結

Shell的兩種主要語法型別有Bourne和C,這兩種語法彼此不相容

Bourne家族主要包括sh、ksh、Bash(linux現用)、psh、zsh

C家族主要包括csh、tcsh

  • 檢視Linux當前執行的Shell
echo $SHELL

返回:

/bin/bash
  • 關於Bash

Bash與sh相容,現在使用的Linux就是使用Bash作為使用者的基本Shell

  • 檢視Bash相容的shell
vi /etc/shells
  • 進入sh版本的Shell
sh

一般安全模式下進入的是此版本的Shell

  • 進入csh版本的Shell
csh
  • 退出到上一個版本的Shell
exit
  • 關於進入Shell的說法

初始登入系統進入的Shell叫父Shell,當進入某一Shell叫進入子Shell

1、echo

輸出字串命令

echo [選項] [字串]

-e: 支援反斜槓控制的字元轉義

  • 轉義列表
字元 含義
\a 輸出警告音
\b 退格鍵,也就是向左刪除鍵
\n 換行符
\r Enter鍵
\t 製表符,也就是Tab鍵
\v 垂直製表符
\0八進位制程式碼 按照ASCII的八進位制輸出對應字元
\x十六進位制程式碼 按照ASCII的十六進位制輸出對應字元

例如:

echo -e "hell\bo"
echo -e "h\te\tl\nl\to\t"
echo -e "\x68\t\x65\t\x6c\n\x6c\t\x6f"
  • 顏色支援
echo -e "\e[1;31m字串\e[0m"

30m=黑色,31m=紅色,32m=綠色,33m=黃色,34m=藍色,35m=洋紅,36m=青色,37m=白色

  • 我的第一個Shell指令碼
#!/bin/bash
#我的第一個Shell指令碼

echo -e "\e[1;34mHello World\e[0m"

將其儲存為hello.sh

  • 執行指令碼

賦予許可權,直接執行(常用)

chmod 755 hello.sh

透過Bash呼叫執行指令碼

bash hello.sh

1、命令別名

  • 檢視系統中所有的命令別名
alias
  • 設定別名
alias 別名='原命令'

其實,以上設定別名的格式與alias檢視的別名格式一樣

cp、mv、rm預設執行是帶-i的,目的是起到詢問作用,防止誤操作

注意,這樣設定的別名是臨時生效,重啟後失效,關於永久生效請繼續閱讀

  • 關於vi

vim是vi的增強版本,vim支援顏色

  • 關於別名永久生效
vim ~/.bashrc

然後:

source ~/.bashrc

開啟家目錄中的別名環境變數配置檔案

將別名配置寫入儲存

  • 刪除別名
unalias 別名

臨時刪除,如果配置檔案還有配置,則重啟重新生效

  • 關於命令的優先順序

以下從優先順序最高到最低排序

1、透過絕對路徑或相對路徑執行的命令
2、執行別名
3、執行Bash的內部命令
4、透過$PATH環境變數定義的目錄查詢順序找到的第一個命令
  • 關於ls顯示的顏色問題

目錄一般是藍色

可執行檔案一般是綠色

普通檔案沒有顏色

2、常用快捷鍵

ctrl+c: 強制終止當前命令

ctrl+l: 清屏

ctrl+a: 游標移動到命令列首

ctrl+e: 游標移動到命令列尾

ctrl+u: 從游標所在位置刪除到行首

ctrl+z: 把命令放入後臺

ctrl+r: 在歷史命令中搜尋

  • 清屏命令
clear

等同於快捷鍵

3、歷史命令

  • 檢視歷史命令
history [選項] [歷史命令儲存檔案]

沒有選項,是檢視當前快取的歷史命令

-c: 清空歷史命令(不建議這樣幹)

-w: 把歷史命令快取儲存到檔案中,後面需要歷史命令儲存檔案路徑

每次退出,歷史命令快取將自動儲存為檔案

每次登陸,會讀取儲存的歷史命令檔案放入快取中

歷史命令預設為1000條,關於修改,請繼續閱讀

  • 修改預設歷史命令數量
vim /etc/profile

然後修改:

HISTSIZE=1000

即可

  • 歷史命令的呼叫方式

使用上下箭頭呼叫

使用!n呼叫編號為n的歷史命令

使用!!呼叫最後執行的一條命令

使用!字串呼叫最後執行以字串開頭的命令

4、Tab鍵

提供命令補全和目錄補全

命令補全依靠PATH變數,目錄補全依靠你的目錄

要養成按Tab鍵的習慣,它可以提高輸入速度,並能檢測你的命令是否有錯誤

5、輸入和輸出重定向

  • 標準輸入輸出
裝置 裝置檔名 檔案描述符 型別
鍵盤 /dev/stdin 0 標準輸入
顯示器 /dev/sdtout 1 標準輸出
顯示器 /dev/sdterr 2 標準錯誤輸出
  • 輸出重定向

file

  • 正確和錯誤資訊同時儲存
命令 作用
命令 > 檔案 2>&1 已覆蓋的方式,把正確輸出和錯誤輸出都儲存到同一個檔案中
命令 >> 檔案 2>&1 已追加的方式,把正確輸出和錯誤輸出都儲存到同一個檔案中
命令 &> 檔案 已覆蓋的方式,把正確輸出和錯誤輸出都儲存到同一個檔案中
命令 &>> 檔案 已追加的方式,把正確輸出和錯誤輸出都儲存到同一個檔案中
命令 >> 檔案 2>> 另一個檔案 把正確輸出和錯誤輸出儲存到不同的檔案中
  • /dev/null

這個檔案是系統的黑洞,輸出資訊寫入這裡面就沒啦

  • 輸入重定向(瞭解一下就可以了)
命令 < 檔案把檔案作為命令的輸入
命令 << 識別符號
... ...
識別符號
  • wc
wc [選項] [<] [檔名]

-c: 統計位元組數

-w: 統計單詞數

-l: 統計行數

以上<可有可無,會統計檔名的行數、單詞數、字元數

wc

手動輸入字元,按ctrl+d統計輸入字元的行數、單詞數、字元數

wc << 識別符號
...
識別符號

手動輸入字元,統計輸入字元的行數、單詞數、字元數

6、管道符

  • 多命令順序執行
多命令執行符 格式 作用
; 命令1;命令2 多個命令順序執行,命令之間沒有任何邏輯聯絡
&& 命令1&&命令2 邏輯與
當命令1正確執行,則命令2才會執行
當命令1執行不正確,則命令2不會執行
|| 命令1||命令2 邏輯或
當命令1執行不正確,則命令2才會執行
當命令1正確執行,則命令2不會執行
  • 一個判斷命令是否正確執行的做法
ls && echo yes || echo no
  • 管道符
命令1 | 命令2

命令1的正確輸出作為命令2的操作物件

  • 管道符使用示例
ll /etc | more

more 檔名 分屏顯示

上面的意思是將ll的結果給more執行,即分屏顯示ll的結果

netstat -an | grep :80

以上是常用的埠檢視工具

netstat -an | grep ESTABLISHED | wc -l

如果有一行,代表有一個連線(這是雙管道符巢狀)

7、萬用字元

萬用字元 作用
? 匹配一個任意字元
* 匹配0個或任意多個任意字元,也就是可以匹配任何內容
[] 匹配中括號中任意一個字元。例如: [abc]代表一定匹配一個字元,或者a,或者b,或者c
[-] 匹配中括號中任意一個字元,-代表一個範圍。例如: [a-z]代表匹配一個小寫字母
[^] 邏輯非,表示匹配不是中括號內的一個字元。例如: [^0-9]代表匹配一個不是數字的字元

ls支援萬用字元列出

  • Bash中其他特殊字元
符號 作用
'' 單引號。在單引號中所有的特殊符號,如“$”何“`”(反引號)都沒有特殊含義
"" 雙引號。在雙引號中所有的特殊符號除了後面說的都沒有特殊含義,但是“$”、“`”和“\”是例外,擁有“呼叫變數的值”、“引用命令”、和“轉義符”的特殊含義
`` 反引號。反引號括起來的內容是系統命令,在Bash中會先執行它。和$()作用一樣,不過推薦$(),因為反引號容易看錯
$() 和反引號一樣,用來引用系統命令
# 在Shell指令碼,起到註釋作用
$ 用於呼叫變數的值,如需要呼叫變數name的值時,需要用$name的方式得到變數的值
\|轉義符,跟在\後面的特殊符號將失去作用,變為普通字元,如\$將輸出“$”符號,而不當做變數引用

Bash中變數與PHP中的變數的區別是賦值不需要“$”,取值需要“$”

本作品採用《CC 協議》,轉載必須註明作者和本文連結
我們是一群被時空壓迫的孩子。 ---- 愛因斯坦

相關文章