1、總結(jié)vim命令行模式常見快捷方式,以及vim查找,替換的方法
vim命令行模式常見快捷方式

i insert, 在光標所在處輸入I 在當前光標所在行的行首輸入a append, 在光標所在處后面輸入A 在當前光標所在行的行尾輸入o 在當前光標所在行的下方打開一個新行O 在當前光標所在行的上方打開一個新行ZZ 保存退出ZQ 不保存退出:q 退出:q! 強制退出,丟棄做出的修改:wq 保存退出:x 保存退出
字符間跳轉(zhuǎn):
h: 左 l: 右 j: 下 k: 上
#COMMAND:跳轉(zhuǎn)由#指定的個數(shù)的字符
單詞間跳轉(zhuǎn):
w:下一個單詞的詞首
e:當前或下一單詞的詞尾
b:當前或前一個單詞的詞首
#COMMAND:由#指定一次跳轉(zhuǎn)的單詞數(shù)
當前頁跳轉(zhuǎn):
H:頁首 M:頁中間行 L:頁底
zt:將光標所在當前行移到屏幕頂端
zz:將光標所在當前行移到屏幕中間
zb:將光標所在當前行移到屏幕底端
行首行尾跳轉(zhuǎn):
^: 跳轉(zhuǎn)至行首的第一個非空白字符
0: 跳轉(zhuǎn)至行首
$: 跳轉(zhuǎn)至行尾
行間移動:
#G :擴展命令模式下:# 跳轉(zhuǎn)至由#指定行
G:最后一行
1G, gg: 第一行
句間移動:
):下一句(:上一句
?段落間移動:
}:下一段{:上一段
Ctrl+f: 向文件尾部翻一屏
Ctrl+b: 向文件首部翻一屏
Ctrl+d: 向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
字符編輯:
x: 刪除光標處的字符
#x: 刪除光標處起始的#個字符
xp: 交換光標所在處的字符及其后面字符的位置
~:轉(zhuǎn)換大小寫
J:刪除當前行后的換行符
替換命令(r, replace)
r: 替換光標所在處的字符
R:切換成REPLACE模式
刪除命令:
d: 刪除命令,可結(jié)合光標跳轉(zhuǎn)字符,實現(xiàn)范圍刪除
復(fù)制命令(y, yank):
y: 復(fù)制,行為相似于d命令
粘貼命令(p, paste):
p:緩沖區(qū)存的如果為整行,則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處的后面
P:緩沖區(qū)存的如果為整行,則粘貼當前光標所在行的上方;否則,則粘貼至當前光標所在處的前面
vim查找,替換的方法
查找
/PATTERN:從當前光標所在處向文件尾部查找
?PATTERN:從當前光標所在處向文件首部查找
n:與命令同方向
N:與命令反方向
查找并替換
s: 在擴展模式下完成查找替換操作
格式:s/要查找的內(nèi)容/替換為的內(nèi)容/修飾符
要查找的內(nèi)容:可使用模式
替換為的內(nèi)容:不能使用模式,但可以使用\1, \2, ...等后向引用符號;還可以使用“&”引用前面查找時查找到的整個內(nèi)容
修飾符:
i: 忽略大小寫
g: 全局替換;默認情況下,每一行只替換第一次出現(xiàn)
gc:全局替換,每次替換前詢問
查找替換中的分隔符/可替換為其它字符,例如
s@/etc@/var@g
s#/boot#/#i
eg:
用vim,在/etc/default/grub倒數(shù)第二行末尾引號前面加入 xyz
:%s/\(.*CMD.*\)"/\1 xyz"/
用vim,在/etc/fstab中給行首不是#開頭的都加上#
:%s@\(^[^#].*\|^$\)@#\1@
方法二
:%s@^[^#]\|^$@#&@
用vim,去除#開頭的行
:%s/^#.*\n//
方法二 留下了空行
:%s@^#.*$@@
2、總結(jié)腳本中運算符、邏輯運算以及用法
條件運算符
| 運算符號 | 代表意義 | 應(yīng)用 | 說明 |
|---|---|---|---|
| = | 等于 | 整型或字符串比較: str1 = str2 | 字符串str1 和字符串str2 相等時返回真,如果在[]中,只能是字符串 |
| == | 等于 | 整型或字符串比較: str1 == str2 | 字符串str1 和字符串str2 相等時返回真,如果在[]中,只能是字符串 |
| != | 不等于 | 整型或字符串比較: str1 != str2 | 字符串str1和字符串str2不相等時返回真,如果在[]中,只能是字符串 |
| < | 小于 | 整型或字符串比較: str1 < str2 | 按字典順序排序,字符串str1 在字符串str2 之前,在[]中,它表示字符串,如需使用請轉(zhuǎn)義< |
| > | 大于 | 整型和字符串比較 | 在[]中,它表示字符串,如需使用請轉(zhuǎn)義> |
| -eq | 等于 | 整型比較: int1 -eq int2 | 如果int1 等于int2,則返回真 |
| -ne | 不等于 | 整型比較: int1 -ne int2 | 如果int1 不等于int2,則返回真 |
| -lt | 小于 | 整型比較: int1 -lt int2 | 如果int1 小于int2,則返回真 |
| -gt | 大于 | 整型比較: int1 -gt int2 | 如果int1 大于int2,則返回真 |
| -z | 空字符串 | 字符串比較: -z string | 字符串string 為空串(長度為0)時返回真 |
| -n | 非空字符串 | 字符串比較 :-n string | 字符串string 為非空串時返回真 |
| -le | 小于或等于 | 整型比較: int1 -le int2 | 如果int1 小于等于int2,則返回真 |
| -ge | 大于或等于 | 整型比較: int1 -ge int2 | 如果int1 大于等于int2,則返回真 |
邏輯運算

3、編寫腳本/root/bin/backup.sh,可實現(xiàn)每日將/etc/目錄備份到 /root/etcYYYY-mm-dd中
[root@centos7 bin]#cat backup.sh
#!/bin/bash
echo "Backup is begin..."
sleep 1
cp -av /etc/ /data/etc`date +%F`
echo "Backup is finished"
4、編寫腳本/root/bin/nologin.sh和login.sh,實現(xiàn)禁止和充許普通用戶登錄系統(tǒng)
解讀:
當/etc/下存在nologin文件時普通用戶就無法登錄系統(tǒng)。管理員刪掉這個文件后才可以登錄。
因此,對于生產(chǎn)環(huán)境中,將來做維護有用,維護時禁止普通用戶登錄。
禁止普通用戶登錄
[root@centos7 bin]#cat nologin.sh
#!/bin/bash
touch /etc/nologin
解除禁止
[root@centos7 bin]#cat login.sh
#!/bin/bash
rm -f /etc/nologin
5、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區(qū)中空間利用率最大的值
[root@centos7 bin]#cat disk.sh
#!/bin/bash
#
#********************************************************************
#Author: Jack
#QQ: Secret
#Date: 2019-05-27
#FileName: disk.sh
#URL: Building
#Description: The test script
#Copyright (C): 2019 All rights reserved
#********************************************************************
echo "The max use of disk is `df -h | grep "/dev/sd.*" | tr -s ' ' | cut -d ' ' -f 5 | sort -nr | head -n1`"