Vim 編譯器
Vim 文件編譯器是編寫文件的好工具,它包括以下 3 種模式:
- 命令模式:移動光標,對文本進行增刪查改等操作;
- 輸入模式:向文件中輸入文本;
- 末行模式:保存或退出文檔,設置編輯環境。
使用 Vim 編譯器時進入的是命令模式,通過 “a、i、o” 三個鍵可以切換為輸入模式。“a” 鍵在光標的后一位進入輸入模式,“i” 鍵在光標的當前位置進入,“o” 鍵則是在光標下面創建一個空行。

Vim 編輯器的常用命令如下:
| 命令 | 作用 |
|---|---|
| dd | 刪除光標所在整行 |
| (數字)dd | 刪除光標處開始的 n 行 |
| yy | 復制光標處所在整行 |
| (數字)yy | 復制刪除光標處開始的 n 行 |
| n | 顯示搜索命令定位到的下一個字符串 |
| N | 顯示搜索命令定位到的上一個字符串 |
| u | 撤銷上一步操作 |
| p | 將之前復制或刪除的數據粘貼到光標后面 |
進入輸入模式編輯好文本后,按 ESC 鍵回到命令模式,然后按 “:” 進入末行模式進行文本的保存和退出。

| 命令 | 作用 |
|---|---|
| :w | 保存 |
| :q | 退出 |
| :q! | 強制退出 |
| :wq! | 保存強制退出 |
| :set nu | 顯示行號 |
| :set nonu | 不顯示行號 |
| :命令 | 執行命令 |
| :整數 | 跳轉到該行 |
| : s/字符串a/字符串b | 將當前光標所在行的第一個字符串 a 替換為字符串 b |
| : s/字符串a/字符串b/g | 將當前光標所在行的所有字符串 a 替換為字符串 b |
| :%s/字符串a/字符串b/g | 將全文的字符串 a 替換為字符串 b |
| ?字符串 | 在文本中從下到上搜索字符串 |
| /字符串 | 在文本中從上到下搜索字符串 |
Shell 腳本
將一系列 Linux 命令用 Vim 編輯器寫到一個文件中,將這個文件的后綴名改為 .sh 就可以建立一個 Shell 腳本了。
vim example.sh
腳本中第一行需要用 “#!” 聲明要使用哪種 Shell 解釋器來執行腳本,而單一的 “#” 則是注釋,一個簡單的 Shell 腳本如下:
#!bash example.sh
#Hello,world!
echo Hello,world!
運行 Shell 腳本可以直接用 bash 解釋器運行,也可以用腳本的路徑來運行。
bash example.sh
./example.sh
參數
運行 Shell 腳本時可以向腳本傳參,寫法是在調用 Shell 腳本文件后面用空格間隔寫上多個參數。一些用於接收參數的變量為:
| 變量 | 存儲內容 |
|---|---|
| $0 | Shell 腳本程序的名稱 |
| $# | 參數的總數 |
| $* | 所有位置的參數值 |
| $? | 顯示上一次命令的返回值 |
| $數字 | 第 n 個傳入的參數值 |
條件表達式
測試語句
Shell 的測試語句用於判斷表達式是否成立,條件成立返回數字 0,否則返回其他數據。測試語句的格式如下所示,注意中括號和表達式之間都有一個空格。
[ 條件表達式 ]
條件表達式自然支持邏輯運算符了,Shell 表達式支持 3 種邏輯運算符。“&&” 表示邏輯與,只有前面的語句執行成功后才會執行后面的語句。“||” 表示邏輯或,前面的語句執行失敗后才會執行后面的語句。“!” 表示邏輯非,邏輯非會把條件測試中的結果取相反的值。例如:
[ -e /dev/cdrom ] && echo "Exist"
[ $USER = root ] || echo "user"
[ ! $USER = root ] || echo "administrator"
在用其他編程語言時,我們可能不是很關心語句是否執行,只關心表達式的運算結果。但是在 Shell 腳本來說要很注意語句的執行順序,某個語句是否執行將產生很大的不同。
文件測試運算符
Shell 腳本對於不同的數據,使用的是不同的運算符進行比較。文件測試運算符有:
| 運算符 | 作用 |
|---|---|
| -d | 測試文件是否為目錄類型 |
| -e | 測試文件是否存在 |
| -f | 判斷是否為一般文件 |
| -r | 測試當前用戶是否有讀權限 |
| -w | 測試當前用戶是否有寫權限 |
| -x | 測試當前用戶是否有執行權限 |
例如:
[ -d /etc/fstab ]
[ -f /etc/fstab ]
數字比較運算符
| 運算符 | 作用 |
|---|---|
| -eq | = |
| -ne | != |
| -gt | > |
| -lt | < |
| -le | ≤ |
| -ge | ≥ |
例如:
[ 10 -gt 10 ]
[ 10 -ep 10 ]
字符串比較運算符
| 運算符 | 作用 |
|---|---|
| = | 比較字符串是否相同 |
| != | 比較字符串是否不同 |
| -z | 比較字符串是否為 null |
例如:
[ -z $String ]
[ $LANG != “en.US” ] && echo "Not en.US"
流程測試語句
條件語句
if 條件語句
if 條件測試操作 1
then 命令序列 1
elif 條件測試操作 2
then 命令序列 2
else
命令序列 3
fi
case 條件語句
case 變量值 in
模式 1)
命令序列 1
;;
模式 2)
命令序列 2
;;
*)
默認命令序列
esac
循環語句
for 循環
for 變量名 in 取值列表
do
命令序列
dono
while 循環
while 條件測試操作
do
命令序列
done
計划服務
Linux 可以在指定的時間段啟用或停止某些服務或命令,實現服務器自動化運行。
一次性計划任務
一次性計划任務指的是設置之后只在指定時間執行一次,一般用於臨時工作需求。
| 命令 | 功能 |
|---|---|
| at 時間 | 設置在指定時間運行的指令 |
| at -l | 查看已設置但是未執行的一次性任務 |
| atrm 任務序號 | 刪除序號對應的任務 |
長期性計划任務
長期性計划任務可以實現按照某個時間周期完成任務,使用 Linux 的 crond 服務可以實現。
| 命令 | 功能 |
|---|---|
| crontab -e | 創建、編輯任務 |
| crontab -l | 查看當前任務 |
| crontab -r | 刪除某個任務 |
