vim和shell编程

文件内容查看命令

  • more 分页查看(重点)

    文本内容比较多的情况下,使用more命令可以分页查看

    more file  分页查看内容
    more +n file 从第n行开始显示内容
    操作方式
    空格:向下滚动一页
    回车:向下滚动一行
    b:向上滚动一页
    =:显示行号
    q:退出
    
  • cat 全文浏览(重点)

    cat file 全文浏览
    cat -n file 带行号全文浏览
    cat file1 file2 > file 合并文件
    tac file 倒序浏览
    
  • head 头部浏览,默认浏览前10行内容

    head -n 50 file 显示file文件前50行的内容
    head -n -10 file 显示除了最后10行以外的内容
    
  • tail 尾部浏览 ,查看文件尾部内容,默认查看10行(重点)

    tail file 查看文件尾部内容,默认查看10行
    tal -5 file 显示最后5行内容
    tail -n +50 file 从第50行开始显示内容
    tail -5f file 显示最后5行内容,并且持续监控文件内容 
    此时打开另一个终端 echo hello >> 12.txt
    
  • 其他查看方式

    less分页浏览,和more类似
    less -N file 分页浏览,并展示行号
    less -m file 分页浏览,并展示百分比
    
    sort排序浏览
    sort 文件 升序查看文件内容
    sort -r 文件 降序查看
    sort -u  文件 取出文件重复内容
    
    sed 流式浏览(重点)
    sed -n "1,5p" 文件  显示1-5行内容
    sed -n "3,5{=;p}" 文件 显示3-5内容,并且打印行号
    sed -n "10p" 文件 显示第10行内容
    

vim编辑器(重点)

  • vim编辑器是linux系统中经典的编辑器,系统中使用的是一个精简版的vi编辑器,vim是vi增强版,比vi更易用,两者命令操作几乎没有区别

  • vim编辑器不同于桌面编辑工具,纯粹的命令行操作编辑工具

  • vim有三种基本工作模式

    • 命令模式、文本输入模式、末行模式
    命令模式:按一下ESC,即可进入命令模式。此模式下可以使用各种合法的vi命令,此时从键盘上输入的任何字符都会被当成命令来解释,命令合法,则执行相应动作
    
    输入模式(编辑模式):在命令下输入i,该模式下用户输入的任何字符都会被当成文本保存起来,并显示在屏幕上,在输入过程中,如果想回到命令模式,按ESC即可
    
    末行模式:用户在命令模式下按“:”即可进入末行模式,此时vim会显示在窗口的最后一行
    hjkl:左下上右
    
  • (1)命令模式

    按键 描述
    x 删除光标所在的字符,相当于delete
    X 删除光标前一个字符,相当于backspace
    dd(常用) 删除光标所在行,删除一行
    ndd n为数字,连续删除光标后n行
    yy(常用) 复制光标所在行,复制遗憾
    nyy n为数组,连续复制光标后n行
    p(小写)P(大写)(常用) 小写p复制数据粘贴在下一行,大写P数据粘贴在上一行
    u,ctrl+r 撤销, 反撤销
    G和gg(常用) G文档最后一行,gg文档第一行
    • ^所在行开头,$所在行尾部,r替换光标所在位置字符
  • (2)编辑模式

    按键 描述
    i (常用) 光标前插入字符
    I 行首插入字符
    a 光标后插入字符
    A 行尾插入字符
    o(常用) 光标下一行插入字符
    O 光标上一行插入字符
  • (3)末行模式

    命令 描述
    :w 保存文件
    :w! 强制保存
    :q 不保存退出
    :q!(常用) 不保存强制退出
    :wq(常用) 保存并退出
    :wq! 强制保存并退出
  • scp命令(重点)

    格式:scp -r 要复制的路径下的文件 用户@ip地址:目标主机路径
    克隆虚拟机
    右击-->管理-->克隆-->下一步-->虚拟机当前状态-->创建完整克隆-->选择名称和位置-->完成
    修改主机名:hostnamectl set-hostname node1,将主机名修改为node1
    
    scp -r /home/ujiuye/plan1.py [email protected]:/home/ujiuye
    

定时任务

  • at:一次性定时任务

  • crontab:周期性定时任务

    今天晚上凌晨3点中期sshd服务 创建一次性定时任务,自动在凌晨3点完成服务重启
    每个月1号,执行一次上月日志的备份  某个特定时刻需要执行指定的操作命令,创建周期性定时任务
    
  • at一次性定时任务

    at -l:查看任务
    at 时间点:指定时间上,添加任务
    ctrl+D:保存定时任务
    atrm -n 删除编号n的定时任务
    
    案例:在15:00,在/home/ujiuye/test/5.txt输出 “spider”
    at 15:00 (回车)
    echo "spider.." >> /home/ujiuye/test/5.txt
    ctrl+D保存
    打开新终端,tail -f 5.txt ,实时查看
    
    at 时间点(HH:MM)
    描述的是指定的时间点执行一个定时任务
    时间早于系统时间,默认第二天的这个时间执行这个任务
    时间晚于系统时间,默认当天的这个时间执行任务
    
  • crontab周期性定时任务

    • 通过crontab的命令,添加,编辑,删除任务

    • crontab -l:列出所有的周期性定时任务

    • crontab -e:编辑当前用户的周期性定时任务

    • crontab -r:删除周期性定时任务

    crontab -e 进入周期性定时任务编辑模式
    * * * * * 
    以第一颗*为例:
    依次是:分钟,小时,天,月,星期
    * : 表示每一天的每小时的每分钟执行一次
    10:表示每一天的每小时的第10分钟执行
    5,10,20:表示每一天的每小时的第5,10,20分钟执行
    5-10:表示每一天的每小时的第5分钟开始直到第10分钟结束
    
    案例:每分钟向/home/ujiuye/test/5.txt 写入“start working”
    
    
    每天6:00执行 /home/ujiuye/test/4.sh
    0 6 * * * 
    每周周六凌晨4点执行
    0 4 * * 6
    

shell编程入门

  • 什么是shell?

  • shell其实就是一个命令解释器,是解释执行的脚本语言,shell编程就是对一堆linux命令的逻辑化处理

  • shell编程的目的

    • 实行自动化操作方式,代替手工的繁琐的步骤
  • shell编程的核心

    • 批量执行linux的命令的操作,将手工执行多次的命令,转换到程序通过命令一次性执行

    • 脚本基本规范

      脚本存放在scripts目录中
      开头添加#!/bin/bash ,确定bash执行命令
      附带作者及版权信息
      脚本名称扩展名为 .sh
      脚本尽量不用中文
      成对的符号一次性书写完成
      循环格式一次性输入完成
      
  • 注释和输入输出

    注释:除了第一行,以#注释
    echo :打印信息,类似于python中的print()函数
    echo -n:打印信息不换行
    read :读取用户输入的信息
    read -p:打印提示信息
    read -s:用户输入信息不回显
    
  • 执行shell脚本

    mkdir scripts
    vim test.sh
    #!/bin/bash
    echo "hello world"
    
    执行上述脚本
    1.bash tesh.sh
    2.sh test.sh
    3. ./test.sh   chmod u+x test.sh
    
  • 变量

    • 什么是变量:shell传递数据的一种方式,作为一个临时存储数据的容器,可以存放数据并在其他地方需要的地方直接通过变量名使用对应的数据
    • 命名规则:数字、字母、下划线组成,数字不能开头,见名知意,下划线命名
    vim test2.sh
    #!/bin/bash
    name=tom
    echo "name:$name"   name:tom
    echo 'name:$name'   name:$name
    echo "name:${name}_01"  name:tom_01
    
    注意:
    变量赋值,使用“=”符号,将“=”右边的结果赋值给左边的变量,等号两边不能有空格
    定义的变量不能和系统命令有冲突
    赋值添加双引号,不加没有影响,但多个字符中间有空格必须加引号
    双引号:弱引用,引用变量
    单引号:强引用,输出引用的字符
    
  • 程序控制结构

    顺序结构,选择结构,循环结构

    • 选择结构
    单分支
    if 条件;then
      条件为True要执行的代码
    fi
    案例:查看ls命令在文件系统环境变量的位置,存在返回ok  which ls
    vim 1.sh
    #!/bin/bash
    if which ls;then
      echo ok
    fi
    
    双分支
    if 条件;then
      条件为True要执行的代码
    else
      其他情况
    fi
    案例:搜索有没有zhang用户,找到返回ok,找不到返回error
    vim 2.sh
    #!/bin/bash
    if grep zhang /etc/passwd;then
      echo ok
    else
      echo error
    fi
    
    多分支
    if [ 条件1 ];then
      执行代码1
    elif [ 条件2 ];then
      执行代码2
    else
      其他情况
    fi
    案例操作:输入功能选择,输入1,输出选项1,输入2,输出选项2
    vim 3.sh
    #!/bin/bash
    read -p "请输入功能选项": choice
    if [ $choice -eq 1 ];then
      echo 选项1
    elif [ $choice -eq 2 ];then
      echo "选项2"
    elif [ $choice -eq 3 ];then
      echo "选项3"
    else
      echo 没有此选项
    fi
    
  • 文件判断

    -e 判断文件是否存在 : if [ -e 文件路径 ]  #注意括号和命令之间有空格
    -d 判断是否是文件夹:  if [ -d 文件路径 ]
    -f 判断是否是文件
    -r 判断是否可读
    -w 判断是否可写
    -x 判断是否可执行
    
    案例:脚本完成自动备份操作
    判断当前目录是否有model目录
    如果没有就创建,有执行备份
    #!/bin/bash
    echo ----开始准备备份----
    if [ -e model ];then
      echo model已存在
      if [ -d model ];then
          echo model是一个目录,可以执行备份
      fi
    else
      echo model不存在,需要先创建
    fi
    echo ---开始备份---
    sleep 2
    echo ---备份完成---
    
  • 字符的判断

    = 判断两个字符是否相等
    != 判断两个字符不相等
    -z 判断字符串长度是否是0
    -n 判断字符串是否为空
    案例操作:
    用户输入“Q”,退出系统,输入“C”,继续
    #!/bin/bash
    read -p "是否退出系统(Q退出,C继续)": ret
    if [ $ret = "Q" ];then
      echo "退出系统"
    elif [ $ret = "C" ];then
      echo 继续
    fi
    
    
  • 整数判断

    -eq 判断两个整数是否相等
    -gt >
    -lt <
    -ge >=
    -le <=
    -ne !=
    
  • 逻辑判断

    &&判断并且关系
    -a判断并且关系
    ||判断或者关系
    -o判断或者关系
    !判断取反
    
  • case选择结构

    case 变量 in
      值)
      命令序列1
      ;;
      值2)
      命令序列2
      ;;
      *)
    无匹配后命令序列
    esac
    案例操作:显示功能选项,输入序号或者功能名称都可以执行
    #! /bin/bash
    echo ============
    echo "   1.login  "
    echo "   2.register  "
    echo "   3.exit  "
    echo ============
    read -p "请输入功能选项": choice
    case $choice in
      1|login)
      echo 登录
      ;;
      2|register)
      echo 注册
      ;;
      3|exit)
      echo 退出
      ;;
      *)
    echo "没有这个选项"
    esac
    
    
  • for循环

    基本操作语法
    for 临时变量 in [取值列表]
    do
      循环中的代码
    done
    #检查ip地址通讯
    vim 7.sh
    #!/bin/bash
    hosts="10.10.35.10 10.10.35.15 10.10.35.25"
    for h in $hosts
    do 
      echo "开始检查$h通讯"
      sleep 1
      echo "检查$h通过"
    done
    echo "所有ip检查通过"
    
  • while循环

    while 条件
    do 
      循环要执行的代码
    done
    
    案例操作:计算1-100之间的和
    #!/bin/bash
    num=1
    sum=0
    while [ $num -le 100 ]
    do 
      sum=$[ $sum + $num ]
      let num+=1
    done
    echo 1-100的和是$sum
    
    
  • 函数的声明和调用

    function 函数名称(){
    函数中的代码
    }
    
    快捷写法
    函数名(){
    函数中的代码
    }
    
    #!/bin/bash
    function func1(){
    echo 鎵цfunc1浠g爜
    }
    
    func2(){
    echo 鎵цfunc2浠g爜
    }
    func1
    func2
    

你可能感兴趣的:(vim和shell编程)