三、Vim文本编辑器-算术和逻辑表达式-Bash编程-总结

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

vim是一款强大的文本编辑器,常见的选项如下:

  1. +# , 这里的井号是某个数字,意思是打开文件时,光标自动跳转至第#号的行首位置
示例: vim +10 /etc/passwd --> 跳转到密码文件的第10行
  1. +/PATTERN , 直接跳转到由正则表达式所匹配到的行处
示例:vim +/^root /etc/passwd -->跳转到密码文件以root开头的行 ---> 这里的+/ 不能省略
  1. -b 以二进制形式打开
示例:vim -b /etc/passwd
:%!xxd --> 命令模式下切换为二进制可编辑模式
  1. -d 比较多个文件,可以找出多个文件的差异之处
示例:vim -d /etc/fstab /data/fstab

Vim的命令模式,也叫普通模式, 默认打开文件就处在此种模式下 。该模式下主要用于查看文件的内容,可以移动光标,可以剪切和粘贴,该模式下常见的快捷操作方式总结如下:

在命令模式光标移动快捷键:

  1. h j k l 上下左右方向移动
  2. w e 单词间向后移动
  3. b 单词间向前移动
  4. H M L 光标在当前页跳转,H是跳转到页首 M是中间 L 是页尾
  5. zt zz zb 光标所在行移动位置,zt移动到最顶部 zz移动到中间 zb移动到底部
  6. ^ $ 0 行首行尾间跳转
  7. G gg 文件第一行和最后一行移动

命令模式下的基本操作 :

  1. x ; 剪切光标处的字符
  2. J : 删除换行符 把多行合成一行
  3. p : 在当前光标的后面粘贴,通常和x搭配使用
  4. P : 在当前光标的前面粘贴
  5. ~ : 转换大小写
  6. r : 替换光标处的某一个字符
  7. 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

  1. y 是复制, 其操作类似于d命令,需要结合光标跳转指令匹配使用
  2. yw : 复制一个单词
  3. y0 : 复制当前光标到行首
  4. y$ : 复制当前光标到行尾
  5. y^
  6. ye
  7. yb
  8. yy : 复制一整行 p 在下方粘贴, 大写的P在上方粘贴新行 Y相当于yy 复制一整行
  9. num加上yy : num是一个数字, 复制num行

粘贴操作:

  1. P : 如果复制为整行,那么在该行的上方粘贴新的一整行内容;否则,在光标之前粘贴
  2. p : 如果复制为整行,那么在该行下方粘贴新的一整行内容;否则,在光标之后粘贴

改变命令:

  1. c 执行删除操作 然后直接进入到插入模式下了
  2. c$ : 删除至行尾,进入插入模式
  3. cw : 删除至下一个单词的词首,进入插入模式
  4. ce :
  5. cb :
  6. cc : 删除一整行
  7. c^ :
  8. C : 相当于c$

vim下的搜索替换功能,是在扩展命令模式下实现的:

地址定界的基本用法:
格式: start_pos,end_pos 起始位置和结束位置
简要说明:

  1. 定界后跟着要执行的操作 比如删除 复制
  2. num1,num2 两个数字确定行的范围,比如 27,30p -> 这就是从27行到30行执行复制操作
  3. num 具体的某一行 执行什么操作, 比如 10d -> 删除第10行
  4. num,+num : 从左侧的行数开始,加上右侧的偏移数字作为结束行 执行相应的操作
  5. 点号就是当前行 -> 比如 .,$d 就是删除当前光标到最后一行的所有内容
  6. $ 最后一行
  7. % 百分号表示全文 比如 %d 删除全文

地址定界高级用法

  1. 格式:/pat1/,/pat2/operation --> 从pat1匹配到的行作为起始,pat2匹配到的行作为结束,对这个范围的>内容执行后面的操作,其中pat1和pat2可以使用正则表达式匹配
  2. 示例如下:
    /b/,/f/d --> 开始位置是查找到以开头的行,结束的位置是查找到以d开头的行,执行的操作是d也即删除
    /^b/,$d ---> 从以b开头的行作为开始,到文件的末尾,执行删除操作
  3. 相应的其它操作还有 :
    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

你可能感兴趣的:(三、Vim文本编辑器-算术和逻辑表达式-Bash编程-总结)