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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

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