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 | 標準錯誤輸出 |
- 輸出重定向
- 正確和錯誤資訊同時儲存
命令 | 作用 |
---|---|
命令 > 檔案 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 協議》,轉載必須註明作者和本文連結