一、总结vim命令行模式常见快捷方式,以及vim查找,替换的方法
vim是一款强大的文本编辑器,常见的选项如下:
- +# , 这里的井号是某个数字,意思是打开文件时,光标自动跳转至第#号的行首位置
示例: vim +10 /etc/passwd --> 跳转到密码文件的第10行
- +/PATTERN , 直接跳转到由正则表达式所匹配到的行处
示例:vim +/^root /etc/passwd -->跳转到密码文件以root开头的行 ---> 这里的+/ 不能省略
- -b 以二进制形式打开
示例:vim -b /etc/passwd
:%!xxd --> 命令模式下切换为二进制可编辑模式
- -d 比较多个文件,可以找出多个文件的差异之处
示例:vim -d /etc/fstab /data/fstab
Vim的命令模式,也叫普通模式, 默认打开文件就处在此种模式下 。该模式下主要用于查看文件的内容,可以移动光标,可以剪切和粘贴,该模式下常见的快捷操作方式总结如下:
在命令模式光标移动快捷键:
- h j k l 上下左右方向移动
- w e 单词间向后移动
- b 单词间向前移动
- H M L 光标在当前页跳转,H是跳转到页首 M是中间 L 是页尾
- zt zz zb 光标所在行移动位置,zt移动到最顶部 zz移动到中间 zb移动到底部
- ^ $ 0 行首行尾间跳转
- G gg 文件第一行和最后一行移动
命令模式下的基本操作 :
- x ; 剪切光标处的字符
- J : 删除换行符 把多行合成一行
- p : 在当前光标的后面粘贴,通常和x搭配使用
- P : 在当前光标的前面粘贴
- ~ : 转换大小写
- r : 替换光标处的某一个字符
- R : 按下 大写的R 进入到替换模式,该模式下从光标处出入的内容将会把原有内容覆盖
删除操作:delete
1. d 是删除操作, 需要结合光标跳转字符,实现选定范围的删除操作,比如:
2. d是行尾 所以 d
3. d0 : 0是行首, d0 就是从光标删除至行首
4. dw: 删除光标开始至下一个单词的词首
6. num+dd : num是一个数字,删除 num行
7. dG : G 是跳转到文件的末行, 所以dG就是删除当前光标到末行
8. dgg : 同理删除当前光标到行首
复制操作: yanked
- y 是复制, 其操作类似于d命令,需要结合光标跳转指令匹配使用
- yw : 复制一个单词
- y0 : 复制当前光标到行首
- y$ : 复制当前光标到行尾
- y^
- ye
- yb
- yy : 复制一整行 p 在下方粘贴, 大写的P在上方粘贴新行 Y相当于yy 复制一整行
- num加上yy : num是一个数字, 复制num行
粘贴操作:
- P : 如果复制为整行,那么在该行的上方粘贴新的一整行内容;否则,在光标之前粘贴
- p : 如果复制为整行,那么在该行下方粘贴新的一整行内容;否则,在光标之后粘贴
改变命令:
- c 执行删除操作 然后直接进入到插入模式下了
- c$ : 删除至行尾,进入插入模式
- cw : 删除至下一个单词的词首,进入插入模式
- ce :
- cb :
- cc : 删除一整行
- c^ :
- C : 相当于c$
vim下的搜索替换功能,是在扩展命令模式下实现的:
地址定界的基本用法:
格式: start_pos,end_pos 起始位置和结束位置
简要说明:
- 定界后跟着要执行的操作 比如删除 复制
- num1,num2 两个数字确定行的范围,比如 27,30p -> 这就是从27行到30行执行复制操作
- num 具体的某一行 执行什么操作, 比如 10d -> 删除第10行
- num,+num : 从左侧的行数开始,加上右侧的偏移数字作为结束行 执行相应的操作
- 点号就是当前行 -> 比如 .,$d 就是删除当前光标到最后一行的所有内容
- $ 最后一行
- % 百分号表示全文 比如 %d 删除全文
地址定界高级用法
- 格式:/pat1/,/pat2/operation --> 从pat1匹配到的行作为起始,pat2匹配到的行作为结束,对这个范围的>内容执行后面的操作,其中pat1和pat2可以使用正则表达式匹配
- 示例如下:
/b/,/f/d --> 开始位置是查找到以开头的行,结束的位置是查找到以d开头的行,执行的操作是d也即删除
/^b/,$d ---> 从以b开头的行作为开始,到文件的末尾,执行删除操作- 相应的其它操作还有 :
y : 复制
w file : 另存为外部文件
r file : 读取外部文件
搜索并替代:
格式:定界符s/要查找的内容/替换为的内容/修饰符
s: 在扩展模式下完成查找替换操作
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到
的整个内容
修饰符有以下几种:
i: 忽略大小写
g: 全局替换;默认情况下,每一行只替换第一次出现
gc:全局替换,每次替换前询问
u查找替换中的分隔符/可替换为其它字符,例如
%s@/etc@/var@g
s#/boot#/#i
删除空白行
%s/^["\n"]// ---> 寻找以换行符开头的行,替换为空
二、总结脚本中运算符、逻辑运算以及用法
-
bash中的算术运算:
『 + - * / : 加减乘除 』
『 % 求余 』
『 ** 乘方 』
『 ++ -- 自增自减 』
『 += -= 增强型赋值 』 -
算术运算有特定的写法来完成:
1. 使用let
n=1+2; echo $n 这样写,默认将1+2当成字符,并不会当成数字运算
let 1+2 使用let 1+2将被当成数字进行运算,但是结果不显示
let n=1+2;echo $n ---> 需要用一个变量保存起来,然后打印变量的值
2. 使用 $[] dollar符加中括号,算术运算写在中括号内
n=$[3*2] ; echo n
3. 使用 $(()) dollar符跟两个小括号,将执行的算术运算写在这两个括号内
n=$((3*5));echo $n
不要和 $(CMD) 搞混了, 这种写法是引用命令
4. 使用命令 expr
expr 3 * 4
-- expr是一个命令,后面跟着的都是参数 注意参数之间要以空格分隔的,不能写成 expr 3*4
expr 3 \* 4
-- 对于乘号还要转义
5. 声明为整数
declare -i n=3+6
echo "算术运算表达式" |bc
-
逻辑运算:
true ,false ---> 逻辑运算中的真的假 是对应于二进制 的1和 0与运算 & : 和1做与运算,原来是什么就保留什么,和0做与运算,结果都为0 echo $[12&24] ---> 结果为8 或运算:| 两个数只要有一个是1,结果就是1,全部为0时,结果才为0 let $[12|24] ---> 结果为28 取反运算 ! : 逻辑运算符只有两种,要么真true,要么假false,如果是10进制的数字,只要不是0都认为是真 echo $[!100] --> 100系统认为是真,取反就变成了假, 结果输出为0 echo $[!1000] --> 1000也认为是真,取反也变成了假,结果输出为0 echo $[!0] --> 0认为是假,取反成了真,结果输出为1 true;echo $? --> 执行状态返回1 fasle;echo $? --> 执行状态返回0 异或运算: ^ 不同为1 , 相同为0 用异或实现两个变量的值互换: 比如有 A B 两个变量 A=10 B=20 第一步: A=${A^B} 把A与B异或后的结果赋值给A 第二步: B=${A^B} 把异或后的值与原来的B值异或, B就成了A 第三步: A=${A^B} 异或值与原来的A异或,又变成了B 这样A就变成了B
三、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到 /root/etcYYYY-mm-dd中
[root@centos7 bin 22:58:04]#vim backup.sh
#!/bin/bash
#!/bin/bash
#
#**********************************************************************
# Desciprtion: the script copy the etc directory to /data/bin/backup.sh
# Date:2019-07-14
# FileName:backup.sh
# Author:zhengsy39
# Version:1.0
#**********************************************************************
# cp的-a选项递归复制所有的文件以及目录,并保留文件的属性
# -v显示复制的过程,开始和结束友好提示用户
echo "backup begin..."
sleep 5
cp -av /etc/ /data/etc-$(date "+%F")
echo "backup end..."
四、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统
实现禁止普通用户登录的脚本:
[root@centos7 ~ 22:42:02]#vim /data/bin/nologin.sh
#!/bin/bash
#
#***************************************************************
# Desciprtion: the script ban on login from normal user
# Date:2019-07-14
# FileName:nologin.sh
# Author:zhengsy39
# Version:1.0
#***************************************************************
# 有时候在生产中为了让管理员顺利执行某些例行的系统维护任务,需要禁止普通用户登录
# 只需要在/etc/目录下创建名称为nologin的文件即可
touch /etc/nologin
[root@centos7 ~ 22:42:55]#cd /data/bin
[root@centos7 bin 22:42:59]#chmod +x nologin.sh
[root@centos7 bin 22:43:08]#ll /etc/nologin
-rw-r--r--. 1 root root 0 Jul 14 22:43 /etc/nologin
实现恢复普通用户登录的脚本:
[root@centos7 bin 22:43:17]#vim login.sh
#!/bin/bash
#
#
#***************************************************************
# Desciprtion: the script allow login from normal user
# Date:2019-07-14
# FileName:login.sh
# Author:zhengsy39
# Version:1.0
#***************************************************************
rm -rf /etc/nologin
[root@centos7 bin 22:46:27]#chmod +x login.sh
[root@centos7 bin 22:46:42]#login.sh
[root@centos7 bin 22:46:49]#ls /etc/nologin
ls: cannot access /etc/nologin: No such file or directory
[root@centos7 bin 22:47:01]#
五、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
[zhengsy39@centos7 bin 22:26:51]$vim disk.sh
#!/bin/bash
#
#***************************************************************
# Desciprtion: the script return the max use percentage of disk
# Date:2019-07-14
# FileName:disk.sh
# Author:zhengsy39
# Version:1.0
#***************************************************************
# 思路:df命令先过滤出含有硬盘分区信息所有的行,然后使用tr命令转换格式统一使用百分号分割字段
# 然后通过cut命令取出硬盘使用率一列,按照数值排序后取出首行,就能得出最大的分区空间使用率
use=`df|grep /dev/sd|tr -s " " "%"|cut -d% -f5|sort -nr|head -n1`
echo "the max percentage of disk is $use"
[zhengsy39@centos7 bin 22:35:22]$chmod +x disk.sh
[zhengsy39@centos7 bin 22:35:26]$disk.sh
the max percentage of disk is 17
网友评论