vim编辑器和bash算术运算入门

(一)vim末行模式

  • vim末行模式:内建的命令行接口
    • 地址定界
      • start_pos[,end_pos]
      • #:特定的第#行,例如5即第5行
        • .:表示当前行
        • $:表示最后一行,例如.,$-1表示从当前行到倒数第2行
        • #,#:指定行范围,左侧为起始行,右侧为结束行,例如10,100表示从第10行到第100行共91行
        • #,+#:指定行范围,左侧为起始行,右侧为偏移量,例如3,+7表示从第3行开始加后面7行共8行
        • %:表示全文,等于1,$
        • /PATTERN/:从光标位置往下,第一个被PATTERN匹配到的行,例如/Pattern/,$表示从匹配行到最后一行
        • 可同编辑命令一同使用,实现编辑操作
          • d/删除,y/复制,c/修改
          • 中间没有空格,编辑命令直接跟在地址定界后面
          • w FileName/内容另存为
          • r FileName/将另外一个文件合并进来
    • 查找
      • /PATTERN:从光标所在处开始,往后查找所有被PATTERN匹配到的字符串,光标停在第一个匹配到的字符串
      • ?PATTERN:从光标所在处开始,往前查找所有被PATTERN匹配到的字符串,光标停在第一个匹配到的字符串
      • n:下一个查找结果,与命令方向相同
      • N:上一个查找结果,与命令方向相反
    • 查找并替换
      • s/用来查找的内容/用来替换的内容/修饰符
        • 用来查找的内容:正则表达式
        • 用来替换的内容:不能使用正则表达式,但是可以引用
          • 如果“用来查找的内容”在模式中使用了分组符号,在“用来替换的内容”中可以使用后项引用1,2...
          • 或者直接引用“用来查找的内容”匹配到的全部文本,要使用&符号
        • 如果内容本身就带有/符号,需要添加进行转义
        • 也可以将/变成其它不常用的字符,这样内容本身的/符号就不需要转义了,例如使用@符号,或者#符号等等
        • 修饰符
          • i:忽略大小写(忽略查找的PATTERN中的大小写)
          • g:全局替换,意味着一行中如果匹配到多次,则均替换;默认只替换每一行中的第一次出现
        • 例子
          • 1,20s/this/This/g
          • %s@<t([[:alpha:]]+)>@T1@g:在全文中将所有的小写t开头的单词转换为大写T开头的单词
          • %s@<t[[:alpha:]]+>@&er@g:在全文中将所有小写t开头的单词后面加er
          • %s@^#@@:删除每一行前面的#号

练习:

1,复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中所有行前面的空白字符

答案:

cp /etc/grub2.cfg /tmp

vim /tmp/grub2.cfg

:

%s@^[[:space:]]+@@

2,复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件中每个以空白字符开头的行的行首加上#

答案:%s@^[[:space:]]+[^[:space:]]@#&@

3,为/tmp/grub2.cfg文件的前三行的行首加上#号

答案:1,3s/*/#&/

4,将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有的gpgcheck=0替换为gpgcheck=1

答案:%s@(enabled|gpgcheck)=0@1=1@g

  • vim的多文件模式
    • vim FILE1 FILE2 FILE3...
    • 在文件间切换:first/第一个文件,last/最后一个文件,next/下一个文件,previous/前一个文件
    • 保存并退出所有文件:wqall
    • 保存所以文件:wall
    • 退出所有文件:qall
    • 多窗口
      • 多文件
        • -o:水平分隔;ctrl+w,松开后按上下箭头,可以切换文件;vim -o FILE1 FILE2 FILE3
        • -O:垂直分隔;ctrl+w,松开后按左右箭头,可以切换文件
      • 单文件
        • ctrl+w,松开后按s,水平分隔单文件
        • ctrl+w,松开后按v,垂直分隔单文件
  • 定制vim的工作特性
    • 末行模式下的命令设定,仅对当前vim进程有效
    • 想永久有效,需要修改配置文件;直接把末行命令写在配置文件里就行
      • 全局:/etc/vimrc
      • 用户个人:~/.vimrc,如果文件不存在,需要自己创建
    • 行号
      • 显示:set number或者set nu
      • 取消:set nonumber或者set nonu
    • 括号匹配高亮(貌似现在vim一直高亮,命令无效了>_<)
      • 显示:set showmatch或者set sm
      • 取消:set noshowmatch或者set nosm
    • 自动缩进
      • 启用:set ai
      • 禁用:set noai
    • 高亮搜索结果
      • 启用:set hlsearch
      • 禁用:set nohlsearch
    • 语法高亮
      • 启用:syntax on
      • 禁用:syntax off
    • 忽略字符大小写
      • 启用:set ic
      • 禁用:set noic
    • 在末行模式下,可以用help命令获得帮助,也可以help subject获得某个主题的帮助,如help set

作业:如果设置tab键缩进4个字符,而不是8个

(二)bash脚本编程的算术运算

  • 算术运算符:+,-,*,/,**,%
  • 算术运算格式
    • let var=算术运算表达式
    • $[算术运算表达式]
    • $((算术运算表达式))
    • expr命令
      • 各个操作数和操作符之间都要有空格
      • 要想获得结果,需要使用命令引用
  • 注:乘法符号在某些场景中需要使用转义字符

练习:写一个脚本,添加三个用户,求这三个用户的UID之和

原文地址:https://www.cnblogs.com/jacky1982/p/7637723.html