vim編輯器與shell命令腳本
1、vim編輯器
我想大家都應該聽說過一句話:Linux系統中一切都是文件,而配置一個服務就是在修改其配置文件的參數。好了沒聽過現在知道這一句話了。接下來有請我們修改配置文件所用的工具:vim編輯器。
vim有三種工作模式:命令模式、輸入模式、末行模式。
命令模式:控制游標移動,可對文本進行複製、粘貼、刪除和查找等工作
輸入模式:正常的文本錄入
末行模式:保存或退出文檔,以及設置編輯環境。

在每次運行vm編輯器時,默認進入命令模式。根據上圖可以知曉,命令模式可以切換到輸入模式和末行模式,末行模式或輸入模式也可以切換到命令模式。但是輸入模式不能直接切換到末行模式。
命令模式常用的命令
| 命令 | 作用 |
|---|---|
| dd | 刪除(剪切)游標所在整行 |
| Ndd | 刪除(剪切)從游標開始的N行 |
| yy | 複製游標所在整行 |
| Nyy | 複製從游標開始的N行 |
| n | 顯示搜索定位到的下一個字元 |
| N | 顯示搜索定位到的上一個字元 |
| u | 撤銷上一步的操作 |
| p | 將之前刪除(dd)或者複製(yy)過的數據粘貼到游標後面 |
末行模式中可用的命令
| 命令 | 作用 |
|---|---|
| :w | 保存 |
| :q | 退出 |
| :q! | 強制退出 |
| :wq! | 強制保存退出 |
| :set nu | 顯示行號 |
| :set nonu | 不顯示行號 |
| :命令 | 執行該命令 |
| :整數 | 跳轉到改行 |
| : s/one/two | 將游標所在行的第一個one替換成two |
| : s/one/two/g | 將游標所在行的所有one替換成two |
| :%s/one/two/g | 將全文中的所有one替換成two |
| ?字元串 | 在文本中從下至上搜索該字元串 |
| /字元串 | 在文本中從上到下搜索該字元串 |
注:冒號+s會觸發小表情,我在中間加了空格
vim確實對新手不是很友好,但是熟悉操作後對於工作效率有很大的幫助。
我們創建一個簡單的文檔。在基本Linux命令(1)中有對touch的記錄,可以知道touch就可以創建文檔。vim編輯器也是支援創建文檔的:vim 文檔名。並且我們會自動進入該文檔的命令模式,如果使用touch命令創建文檔,我們只會創建一個文檔還需要使用命令或者vim對其進行操作。
從第一張截圖上可以知道從命令模式進入輸入模式可以按a、i、o三個按鍵。a與i鍵相差不多,都是在游標處進入輸入模式,o鍵則是在游標所在行的下方創建一個新的空白行並在空白行處進入輸入模式。


當我們修改了文件內容卻沒有保存而直接退出時,vim會拒絕我們的操作,此時我們需要使用強制操作,同時強制符號「!」必須放在末尾,不然無法生效。
明白上述內容的時候我們就可以簡單的對文檔進行修改。我們還需要對一些實踐經驗來證實vim的功能。
1.1 修改主機名稱
主機名保存在etc目錄下的hostname文件內。
- 使用vim編輯器進行修改「/etc/hostname」主機名稱文件。
- 把原始主機名刪除後追加自己想要設置的主機名稱。
- 進入末行模式輸入":wq!"保存並退出文檔,使用hostname命令檢查是否修改成功。

1.2 配置網卡資訊
- 在命令行鍵入
vim /etc/sysconfig/network-scripts/ifcfg-eno並按位於CapsLock鍵上方的tab鍵自動補全內容。 - 回車進入網卡配置文件。根據自己的實際情況進行修改。以我的網卡資訊為例
設備類型:TYPE=Enthernet
地址分配模式:BOOTPROTO=static (static、none、dhcp)
網卡名臣:NAME=eno16777728
是否啟動:ONBOOT=yes
IP地址:IPADDR=192.168.80.138
子網掩碼:NETMASK=255.255.255.0
網關地址:GATEWAY=182.168.80.2
DNS地址:DNS1=192.168.80.2 - 重啟網卡服務並測試網路是否聯通(ping +目標ip地址或網址)

在ping命令測試網路狀況的時候是不會自動終止的,因此我們需要使用ctrl+c強制終止。我這裡ping的是百度,這個shifen是百度名下防黑客的網站。我們只要知道我們能ping通網路就可以。

2、編寫shell腳本
shell解釋器一直在人和電腦硬體之間充當翻譯官的作用,想要正確使用shell中的功能特性就需要我們準確下達命令。shell腳本有兩種工作方式:互動式和批處理。
互動式:用戶輸入每輸入一條命令就立即執行
批處理:由用戶事先編寫好一個完整的腳本,shell會一次執行其中的多條命令
2.1編寫簡單的腳本
在開始編寫自己的第一個腳本之前,我們先了解一下腳本的基本框架。
腳本聲明:#!/bin/bash
腳本注釋:#+文字資訊
腳本命令:需要的命令/功能
可以發現,在編寫玩腳本後並沒有執行成功,反而提示許可權不足。因為我們還么有去學習怎麼提升許可權,所以我們先使用「解釋器 腳本」的格式執行。

2.2 接收用戶的參數
上面的例子只能執行已經事先定義好的功能,有些時候是需要我們人為輸入參數的。
| 變數 | 作用 |
|---|---|
| $0 | 獲取腳本名稱 |
| $# | 獲取輸入的腳本參數個數 |
| $* | 把輸入的參數全部列印 |
| $1 | 第一個參數 |

2.3 判斷用戶的參數
條件測試語句格式:[ 條件表達式 ]。
文件測試語句
邏輯測試語句
整數測試語句
字元串測試語句
shell腳本中針織判斷和編程是相反的,零為真,非零為假。
文件測試所用的參數
| 運算符 | 作用 |
|---|---|
| -d | 測試文件是否為目錄類型 |
| -e | 測試文件是否存在 |
| -f | 判斷文件是否為一般文件 |
| -r | 測試當前用戶是否有許可權讀取 |
| -w | 測試當前用戶是否有許可權寫入 |
| -x | 測試當前用戶是否有許可權執行 |

邏輯與(&&):A成立則B執行
邏輯或(||):A不成立則B執行
邏輯非(!):!(A成立)即不成立,!(A不成立)即成立

可用的整數比較運算符
| 運算符 | 作用 |
|---|---|
| -eq | 是否等於 |
| -ne | 是否不等於 |
| -gt | 是否大於 |
| -lt | 是否小於 |
| -le | 是否小於等於 |
| -ge | 是否大於等於 |

常見的字元串比較運算符
| 運算符 | 作用 |
|---|---|
| = | 比較字元串內容是否相同 |
| != | 比較字元串內容是否不同 |
| -z | 判斷字元串是否為空 |

3、 流程式控制制語句
3.1 單分支測試語句
單分支if語句結構:
if 條件測試語句
then
命令序列
fi

3.2 雙分支測試語句
雙分支if語句結構:
if 條件測試語句
then
命令序列1
else
命令序列2
fi

read命令可以接收用戶輸入的資訊。-p參數用於輸出提示資訊。
3.3 多分支測試語句
多分支if語句結構:
if 條件測試語句1
then
命令序列1
elif 測試語句2
then
命令序列2
else
命令序列3
fi

