Vim与脚本练习

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。

** 脚本练习**

  1. 编写脚本显示当前硬件分区空间利用率最大的值
[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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,934评论 0 10
  • Linux习惯问题: 在vim编辑时,按了ctrl + s后,再按ctrl + q就可以继续执行了。ctrl + ...
    光着脚的鞋阅读 4,563评论 0 16
  • bash中变量的种类 局部变量:生效范围为当前shell进程,对当前shell之外的其它shell进程,包括当前s...
    毛利卷卷发阅读 461评论 0 1
  • 1.描述计算机的组成及其功能 (一)计算机的组成 1.CPU 2.CPU风扇 3.BIOS 4.内存 5.硬盘 6...
    whamai阅读 1,549评论 0 1
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 3,810评论 0 10