Vim命令总结
v #从光标当前位置开始,光标所经过的字符会被选中,再按一下v结束
V #从光标当前行开始,光标经过的行都会被选中,再按一下V结束
Ctrl + v #从光标当前位置开始,选中光标起点和终点所构成的矩形区域,再按一下Ctrl + v结束
ggVG #选中全部的文本, 其中gg为跳到行首,V选中整行,G末尾
d #删除
y #复制 (默认是复制到寄存器)
p #粘贴 (默认从寄存器取出内容粘贴)
x #将光标移到该字符上按下"x"即可删除该字符
dd #删除一整行
J #把两行合并成一行,即删除换行符
u #撤销上一步操作
ctrl+R #重做
i #可以在当前光标之前插入文本。
a #可以在当前光标之后插入文本。
o #可以在当前行的下面另起一行,并使当前模式转为Insert模式
O #(注意是大写的字母O)将在当前行的上面另起一行
w #可以将光标向前移动一个word的首字符上,比如"3w"将光标向前移动3个words
b #将光标向后移动到前一个word的首字符上
e #将光标移动到下一个word的最后一个字符
ge #将光标移动到前一个word的最后一个字符上
$ #将光标移动到当前行行尾
^ #将光标移动到当前行的第一个非空白字符上
0 #把光标移动到当前行的第一个字符上
% #跳转到与当前光标下的括号相匹配的那一个括号上去
set nu #在每行的前面显示一个行号
set nonu #关闭行号
/string #搜索一个字符串,按'n'可以跳转到下一个匹配字符
:set hls #高亮显示搜索结果
:set nohls #关闭高亮显示搜索结果
/was$ #匹配以was结尾的词
/^was #匹配以was开头的词
r #替换单个字符
x #删除当前光标下的字符("dl"的快捷命令)
X #删除当前光标之前的字符("dh"的快捷命令)
D #删除自当前光标至行尾的内容("d$"的快捷命令)
dw #删除自当前光标至下一个word的开头
db #删除自当前光标至前一个word的开始
diw #删除当前光标所在的word(不包括空白字符)
daw #删除当前光标所在的word(包括空白字符)
dG #删除当前行至文件尾的内容
dgg #删除当前行至文件头的内容
运算符
+ 加法 `expr $a + $b`
- 减法 `expr $a - $b`
* 乘法 `expr $a \* $b`
/ 除法 `expr $b / $a`
% 取余 `expr $b % $a`
= 赋值 a=$b 将把变量 b 的值赋给 a
== 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回值为0,即 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回值为1,即 true。
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于( greater than)右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于(less than)右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算(or),有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算(and),两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -n $a ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
** 脚本练习**
- 编写脚本显示当前硬件分区空间利用率最大的值
[root@localhost ~]# vi ./disk.sh
#!/bin/bash
#
#****************************************************************************************
#Author : Tery.xu
#QQ : 937543378
#Date : 2019-04-08
#FileName : ./disk.sh
#URL : https://www.jianshu.com/u/4ad081c39248
#Description : The test script
#Copyright (C) : 2019 All rights reserved
#****************************************************************************************
df -h |awk '{print $5,$6}'|awk -F '%' '{print $1}'|sort -nr|head -n 1
[root@localhost ~]# ll
total 16
-rw-------. 1 root root 1593 4月 6 22:25 anaconda-ks.cfg
-rw-r--r-- 1 root root 720 4月 8 22:53 disk.sh
-rw-r--r--. 1 root root 1641 4月 6 22:30 initial-setup-ks.cfg
-rw-r--r--. 1 root root 968 4月 6 22:54 ks.cfg
[root@localhost ~]# chmod +x disk.sh
[root@localhost ~]# ll
total 16
-rw-------. 1 root root 1593 4月 6 22:25 anaconda-ks.cfg
-rwxr-xr-x 1 root root 720 4月 8 22:53 disk.sh
-rw-r--r--. 1 root root 1641 4月 6 22:30 initial-setup-ks.cfg
-rw-r--r--. 1 root root 968 4月 6 22:54 ks.cfg
[root@localhost ~]# sh disk.sh
81
2.编写脚本实现禁止和允许普通用户登录系统
#禁止普通用户登录
[root@localhost ~]# useradd tery
[root@localhost ~]# echo '123456'|passwd --stdin tery
Changing password for user tery.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# cat /etc/passwd|grep tery
tery:x:1001:1001::/home/tery:/bin/bash
[root@localhost ~]# vi nologin.sh
#!/bin/bash
#
#****************************************************************************************
#Author : Tery.xu
#QQ : 937543378
#Date : 2019-04-08
#FileName : nologin.sh
#URL : https://www.jianshu.com/u/4ad081c39248
#Description : The test script
#Copyright (C) : 2019 All rights reserved
#****************************************************************************************
sed -i 's#/home/tery:/bin/bash#/home/tery:/sbin/nologin#g' /etc/passwd
[root@localhost ~]# ll
total 20
-rw-------. 1 root root 1593 4月 6 22:25 anaconda-ks.cfg
-rwxr-xr-x 1 root root 720 4月 8 22:53 disk.sh
-rw-r--r--. 1 root root 1641 4月 6 22:30 initial-setup-ks.cfg
-rw-r--r--. 1 root root 968 4月 6 22:54 ks.cfg
-rw-r--r-- 1 root root 722 4月 8 23:04 nologin.sh
[root@localhost ~]# chmod +x nologin.sh
[root@localhost ~]# sh nologin.sh
[root@localhost ~]# cat /etc/passwd|grep tery
tery:x:1001:1001::/home/tery:/sbin/nologin
#允许普通用户登录
[root@localhost ~]# vi login.sh
#!/bin/bash
#
#****************************************************************************************
#Author : Tery.xu
#QQ : 937543378
#Date : 2019-04-08
#FileName : login.sh
#URL : https://www.jianshu.com/u/4ad081c39248
#Description : The test script
#Copyright (C) : 2019 All rights reserved
#****************************************************************************************
sed -i 's#/home/tery:/sbin/nologin#/home/tery:/bin/bash#g' /etc/passwd
[root@localhost ~]# chmod +x login.sh
[root@localhost ~]# sh login.sh
[root@localhost ~]# cat /etc/passwd|grep tery
tery:x:1001:1001::/home/tery:/bin/bash
3.编写脚本将/etc目录备份到/root/etc/YYYY-mm-dd
[root@localhost ~]# vi backup.sh
#!/bin/bash
#
#****************************************************************************************
#Author : Tery.xu
#QQ : 937543378
#Date : 2019-04-08
#FileName : backup.sh
#URL : https://www.jianshu.com/u/4ad081c39248
#Description : The test script
#Copyright (C) : 2019 All rights reserved
#****************************************************************************************
cp -r /etc/ /root/etc`date +%F`
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
* 1 * * * /root/backup.sh