一、 vim命令行模式常见快捷方式,以及vim查找,替换的方法
1. vim命令行模式常见快捷方式

| 快捷键 | 说明 |
|---|
| i | insert, 在光标所在处输入 |
| I | 在当前光标所在行的行首输入 |
| a | append, 在光标所在处后面输入 |
| A | 在当前光标所在行的行尾输入 |
| o | 在当前光标所在行的下方打开一个新行 |
| O | 在当前光标所在行的上方打开一个新行 |
| ZZ | 保存退出 |
| ZQ | 不保存退出 |
| :q | 退出 |
| :q! | 强制退出,丢弃做出的修改 |
| :wq | 保存退出 |
| :x | 保存退出 |
| 字符间跳转 | |
| h | 左 |
| l | 右 |
| j | 下 |
| k | 上 |
| #COMMAND | 跳转由#指定的个数的字符 |
| 单词间跳转 | |
| w | 下一个单词的词首 |
| e | 当前或下一单词的词尾 |
| b | 当前或前一个单词的词首 |
| #COMMAND | 由#指定一次跳转的单词数 |
| 当前页跳转 | |
| H | 页首 |
| M | 页中间行 |
| L | 页底 |
| zt | 将光标所在当前行移到屏幕顶端 |
| zz | 将光标所在当前行移到屏幕中间 |
| zb | 将光标所在当前行移到屏幕底端 |
| 行首行尾跳转 | |
| ^ | 跳转至行首的第一个非空白字符 |
| 0 | 跳转至行首 |
| $ | 跳转至行尾 |
| 行间移动 | |
| #G | 扩展命令模式下:# 跳转至由#指定行 |
| G | 最后一行 |
| 1G, gg | 第一行 |
| 句间移动 | |
| ) | 下一句 |
| ( | 上一句 |
| 段落间移动 | |
| } | 下一段{ |
| Ctrl+f | 向文件尾部翻一屏 |
| Ctrl+b | 向文件首部翻一屏 |
| Ctrl+d | 向文件尾部翻半屏 |
| Ctrl+u | 向文件首部翻半屏 |
| 字符编辑 | |
| x | 删除光标处的字符 |
| #x | 删除光标处起始的#个字符 |
| xp | 交换光标所在处的字符及其后面字符的位置 |
| ~ | 转换大小写 |
| J | 删除当前行后的换行符 |
| 替换命令 | (r, replace) |
| r | 替换光标所在处的字符 |
| R | 切换成REPLACE模式 |
| 删除命令 | |
| d | 删除命令,可结合光标跳转字符,实现范围删除 |
| x | 删除当前光标所在位置的字符 |
| dd | 删除当前光标所在行 |
| dw | 删除当前光标所在位置的单词 |
| d$ | 删除当前光标所在位置至行尾的内容 |
| J | 删除当前光标所在行行尾的换行符(拼接行) |
| u | 撤销前一编辑命令 |
| 复制命令 | (y, yank) |
| y | 复制,行为相似于d命令 |
| 粘贴命令 | (p, paste) |
| p | 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面 |
| P | 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面 |
2.vim查找,替换的方法
查找
| 快捷键 | 说明 |
|---|
| /string | 正向查找(sting为查找对象) |
| ?string | 反向查找 |
| set hls | 查找高亮显示命令 ,使用*键将当前光标的单词高亮显示,使用n浏览下一个结果 |
替换
| 快捷键 | 说明 |
|---|
| :s/old/new | 将当前行的第一个字符串old替换为new |
| :s/old/new/g | 将当前行的所有字符串old替换为new |
| :10s/old/new/g | 将指定行的所有字符串old替换为new |
| :10,13s/old/new/g | 将指定行的所有字符串old替换为new |
| :%s/old/new/g | 将文本中所有的字符串old替换为new |
| :%s/old/new/gc | 依次替换每个字符串 |
| :%s/^struct/new/g | 将所有以struct开头的字符串替换为new |
二、脚本中运算符、逻辑运算以及用法
1. 条件运算符
| 运算符号 | 代表意义 | 应用 | 说明 |
|---|
| = | 等于 | 整型或字符串比较: str1 = str2 | 字符串str1 和字符串str2 相等时返回真,如果在[]中,只能是字符串 |
| == | 等于 | 整型或字符串比较: str1 == str2 | 字符串str1 和字符串str2 相等时返回真,如果在[]中,只能是字符串 |
| != | 不等于 | 整型或字符串比较: str1 != str2 | 字符串str1和字符串str2不相等时返回真,如果在[]中,只能是字符串 |
| < | 小于 | 整型或字符串比较: str1 < str2 | 按字典顺序排序,字符串str1 在字符串str2 之前,在[]中,它表示字符串,如需使用请转义< |
| > | 大于 | 整型和字符串比较 | 在[]中,它表示字符串,如需使用请转义> |
| -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,则返回真 |
2. 逻辑运算符
| 运算符号 | 代表意义 | 应用 | 说明 |
|---|
| -a | 双方都成立(and) | 逻辑表达式 –a 逻辑表达式 | 在[] 表达式中使用 |
| -o | 单方成立(or) | 逻辑表达式 –o 逻辑表达式 | 在[] 表达式中使用 |
| ! | 逻辑否,条件为假,结果为真。 | | |
| && | 双方都成立(and) | 逻辑表达式 && 逻辑表达式 | 在[[]] 表达式中使用 |
| \ \ | 单方成立(or) | | |
三、脚本实验
1.编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到 /root/etcYYYY-mm-dd中
#!/bin/bash
clear
echo "备份/etc/到/root/etc"$(date +%F-%m-%d)!
cp -af /etc/ /root/etc$(date +%F-%m-%d)
2.编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统
思路
当/etc/下存在nologin文件时普通用户就无法登录系统。管理员删掉这个文件后普通用户才可以登录。
禁止普通用户登录
[root@centos7 bin]#cat /root/bin/nologin.sh
#!/bin/bash
mkdir -p /etc/nologin
解除禁止
[root@centos7 bin]#cat /root/bin/login.sh
#!/bin/bash
rm -fr /etc/nologin
3.编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
#!/bin/bash
echo "当前硬盘分区中空间利用率最大的值为: "$(df |tr -s " " ":"|cut -d ":" -f5|egrep -o "[[:digit:]]*"|sort -nr|head -n1)"%"
```