vim 文本编辑器shell脚本:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim 文本编辑器shell脚本:相关的知识,希望对你有一定的参考价值。

vim 文本编辑器:
    三种主要模式:
        命令模式(默认):移动光标,剪切/粘贴文本
        插入(编辑)模式:修改文本 输入i 进入插入模式
        扩展模式:保存,退出等
    
    快键   
        i: insert, 在光标所在处输入
        I:在当前光标所在行的行首输入
        a: append, 在光标所在处后面输入
        A:在当前光标所在行的行尾输入
        o: 在当前光标所在行的下方打开一个新行
        O:在当前光标所在行的上方打开一个新行
 
        Ctrl+f  向文件尾部翻一屏
        ctrl+b  向文件首部翻一屏
        ctrl+d  向文件尾部翻半屏
        ctrl+u  向文件首部翻半屏
        
        :q 退出
        :q! 强制退出,丢弃做出的修改
        :wq保存退出
        :x 保存退出
    命令模式
        ZZ: 保存退出
        ZQ:不保存退出
        
        w写(存)磁盘文件
        wq写入并退出
        x 写入并退出
        q 退出
        q!不存盘退出,即使更改都将丢失
        r filename 读文件内容到当前文件中
        w filename 将当前文件内容写入另一个文件
    查找并替换
        s: 在扩展模式下完成查找替换操作
        格式:s/要查找的内容/替换为的内容/修饰符
        要查找的内容:可使用模式
        替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
        修饰符:
         i: 忽略大小写
         g: 全局替换;默认情况下,每一行只替换第一次出现;
        查找替换中的分隔符/可替换为其它字符,例如
            [email protected]/[email protected]/[email protected]
            s#/boot#/#i
        
    扩展模式:地址定界
        .: 当前行
        $: 最后一行
        .,$-1 当前行到倒数第二行
        %:全文, 相当于1,$
        
        定制vim的工作特性
            配置文件:永久有效
            全局:/etc/vimrc
            个人:~/.vimrc
            扩展模式:当前vim进
    
bash脚本编程:
    
    bash的配置文件
        全局配置:
            /etc/profile
            /etc/profiel.d/*.sh
            /etc/bashrc
        个人配置:
            ~/.bash_profile
            ~/.bashrc
            
        shell 登录两种方式:
            交互式登录:
                (1)直接通过终端输入帐号密码登录
                (2)使用 su - chen 切换用户
                执行顺序:
                    /etc/profile -> /etc/profile.d/*.sh -> ~/.bashrc_profile -> ~/.bashrc -> /etc/bashrc
                
                非交互式登录:
                    (1)su chen
                    (2)图形界面打开的终端
                    (3)执行脚本
                    执行顺序:
                        ~/.bashrc -> /etc/bashrc-> /etc/profile.d/*.sh
                        
                profile类
                    按功能划分,存在两类:
                        profile:为交互式登录的shell提供配置
                            全局:/etc/profile, /etc/profile.d/*.sh
                            个人:~/.bash_profile
                        功能:
                            (1)用于定义环境变量
                            (2)运行命令或脚本
                            
                        bashrc类:
                            bashrc类:为非交互式和交互式登录的shell提供配置
                            全局:/etc/bashrc
                            个人:~/.bashrc
                            功用:
                            (1)定义命令别名和函数
                            (2)定义本地变量
                            
                        修改profile和bashrc文件后需生效
                            两种方法:
                                1、重新启动shell进程
                                2 . 或source
                                列:
                                .~/.bashrc
                        BASH 退出任务
                            保存在~/.bash_logout文件中(用户)
                            在退出登录shell时运行
                            用于
                                创建自动备份
                                删除临时文件
                                
    编程基础:
        程序:数据+指令
        程序编程风格:
            过程式:以指令为中心,数据服务于指令
            对象式:以数据为中心,指令服务于数据
        shell程序:提供了编程能力,解释执行
            
        编程逻辑处理方式:
            顺序执行
            循环执行
            选择执行
                
    shell 编程:过程式、解释执行
        数据存储:变量、数组
        表达式:a + b
        语句:if
                
    shell格式要求:首行shebang机制
        #!/bin/bash
        #!/usr/bin/python
        #!/usr/bin/perl
                
    shell 脚本的用途:
        自动化常用命令
        执行系统管理和故障
        创建简单的应用程序
        处理文本或文本
                
    创建shell脚本:
        第一步:使用文本编辑器来创建文本文件
        第一行必须包括shell声明序列:#!
            #!/bin/bash
            添加注释
            注释以#开头
                    
        第二步:运行脚本
            给予执行权限,在命令行上指定脚本的绝对或相对路径
            直接运行解释器,将脚本作为解释程序的参数运行
        示列:
            #!/bin/bash     
            #author chen   
            #Versions 1.0
            echo "The host of time: $(date)"   显示当前的时间
            echo "The current directory: $(pwd)"    显示当前所在的目录
        
        脚本调试
            bash -n #### :检查脚本中的语法中的错误
                建议 :每次写完脚本都检测一下
            
            bash -x ####:给脚本添加x执行权限
            
    变量:命令的内存空间
        
        变量的类型:
            作用:
                1、数据存储格式
                2、参与的运算
                3、表示的数目范围
            类型:
                字符
                数值:整型、浮点型
                
            强类型:
                定义变量时必须指定类型、参与运算必须符合类型
                要求:调用未声明变量会产生错误
            弱类型:
                无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用
                
            变量命名法则:
                1、不能使程序中的保留字
                2、只能使用数字、字母及下划线,且不能以数字开头
                3、看到名字知道意思
                4、统一命名规范
                
        bash变量的种类:
            根据变量的生效范围等标准
                本地变量:生效范围为当前shell进程;对当前shell之外的其他shell进程,包括当前shell的子shell进程均无效
                    变量赋值:name=‘value’
                    可以使用引用value:
                        (1)可以是直接字串:name=‘root’
                        (2)变量引用:name="$USER"
                        (3)命令引用:name=`命令`,name=$(命令)
                    变量引用:${name},$name
                        "" 弱引用,其中的变量引用会被替换为变量值
                        ‘‘ 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
                    显示已定义的所有变量:set
                    删除变量:unset name
                    
                    
                    
                    练习:
                1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。
                    vim systeminfo.sh
                    #!/bin/bash
                    #
                    echo "The current host name: $(hostname)"
                    echo "The IPV4: `ifconfig eno16777736 | head -2 | tail -1 | tr ‘ ‘ ‘#‘ | cut -d# -f 10`"
                    echo "The Operating system: `cat /etc/centos-release`"
                    echo "Linux Versions: `uname -r`"
                    echo "CPU model: `cat /proc/cpuinfo | grep "model name" | tail -1 | cut -d: -f2`"
                    echo "memory Size: `cat /proc/meminfo | grep "MemTotal" | cut -d: -f2`"
                    echo "Disk size: `fdisk -l  /dev/sda | head -n 2 | tail -1 | cut -d: -f2`"
                    执行结果:
                    The current host name: localhost.localdomain
                    The IPV4: 192.168.148.121
                    The Operating system: CentOS Linux release 7.2.1511 (Core)
                    Linux Versions: 3.10.0-327.el7.x86_64
                    CPU model:  Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
                    memory Size:         1868692 kB
                    Disk size:  214.7 GB, 214748364800 bytes, 419430400 sectors
               
                2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中
                    #!/bin/bash
                    #
                    cp -a /etc/ /root/etc`date +%F`、
                    显示结果:
                    etc2016-12-24
                    
                3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
                    #!/bin/bash
                    #
                    echo "According to maximum utilization rate of hard disk partition: `df -h | grep "sda" | tr -s ‘ ‘ | tr -s ‘ ‘ ‘#‘ | cut -d# -f5 |sort -n | tail -1`"                显示结果:
                    [[email protected] ~]# bash bin/disk.sh
                    According to maximum utilization rate of hard disk partition: 5%
              
                4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序
                    #!/bin/bash
                    #
                    echo "Connect the unit of IPV4 addresses to display:"
                    netstat -tnp | tail -n +3 | tr -s ‘ ‘ ‘:‘ | cut -d: -f6 | uniq -c | sort -rn
                    显示结果:
                    [[email protected] ~]# bash /bin/links.sh
                    Connect the unit of IPV4 addresses to display:
                      2 192.168.148.123
                        
                
                环境变量:生效范围为当前shell进程及其子进程
                    变量声明、赋值:
                        export name=VALUE
                        declare -x name=VALUE
                    变量引用:$name,${name}
                    
                    显示所有环境变量:
                        exprot
                        env
                        printenv
                    删除:unset name
                    
                    bash内建的环境变量:
                         PATH、SHELL、USER、UID、HISTSIZE、HOME、PWD、OLDPWD、HISTFILE、PS1
                        
                
                局部变量:生效范围为当前shell进程中某代码片段(通常指函数)
                
                位置变量:$1,$2. . .来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
                    $1,$2,. . .:对应第1、第2等参数。shift[n]换位置
                    $0:命令本身
                    $*:传递给脚本的所有参数,全部参数合为一个字符串
                    [email protected]:传递给脚本的所有参数,每个参数为独立字符串
                    $#:传递给脚本的参数的个数
                        [email protected] $* 只在被双引号包起来的时候才会有差异
                        
                只读变量:只能声时,但不能修改和删除
                    readonly name
                    示列:
                        PS=3.445   定义一个变量
                        [[email protected] ~]# readonly PS  确定 之后就无法修改
                        [[email protected] ~]# echo $PS
                        3.445
                        [[email protected] ~]# PS=3.11  注意:只有脚本运行玩、退出终端exit 才可以修改定义
                        -bash: PS: readonly variable
                    
                    declare -r name
                    
                
            算术运算:
                bash中的算术运算:help、let
                    +、-、/、%取模(取余)、**(乘方)
                    实现算术运算:
                    (1)let var=算术表达式
                        let v3=v1+v2
                        [[email protected] ~]# echo $v3
                                            30
                    
                    (2)var=$[算术表达式]
                        v4=$[v1+v2]
                        [[email protected] ~]# echo $v4
                                            30
                    
                    (3)var=$((算术表达式))
                        v5=$((v1+v2))
                        [[email protected] ~]# echo $v5
                                            30
                    
                    (4)var=$(expr arg1 arg2 arg3. . .)
                        v5=$(expr 1 + 2)
                        [[email protected] ~]# echo $v5        
                                            3
                    
                    (5)declare -i var=数值
                        declare -i v1=100
                        [[email protected] ~]# declare -i v2=100
                        [[email protected] ~]# declare -i v3=v1+v2
                        [[email protected] ~]# echo $v3
                                            200
                    
                    (6)echo `算术表达式` | bc
                    
                        
                乘法符号有些场景中需要转义,如*
                bash有内建的随机数生成器:$RANDOM(1-32767)
                    echo $[$RANDOM%50]:0-49之间随机数
                    
            赋值
                增强型赋值:
                    +=、==、*=、/=、%=
                let varOPERvalue
                    例如:let count+=3
                        自动3后字赋值
               
            练习:
                练习1:写一个脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和
                    #!/bin/bash
                    #
                    ID1=$(head -n 10 /etc/passwd | grep "operator" | cut -d: -f3)
                    echo "ID1=$ID1"
                    ID2=$(head -n 20 /etc/passwd | grep "tss" | cut -d: -f3)
                    echo "ID2=$ID2"
                    ID=$[ID1+ID2]
                    echo "Total:$ID"
                    显示结果:
                    [[email protected] bin]# bash sumid.sh
                    ID1=11
                    ID2=59
                    Total:70
                
                练习2:写一个脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和
                    #!/bin/bash
                    #
                    K1=`grep -c "^[[:space:]]*$" $1`
                    K2=`grep -c "^[[:space:]]*$" $2`
                    K3=$[K1+K2]
                    echo $K3 | bc
                    显示结果:
                    bash sumspace.sh  /etc/profile  /etc/fstab
                    12
                
                练习3:写一个脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件
                    #!/bin/bash
                    C1=`ls /etc/ | wc -w`
                    C2=`ls /var/ | wc -w`
                    C3=`ls /usr/ | wc -w`
                    C=$[C1+C2+C3]
                    echo $C
                    显示结果:
                    [[email protected] bin]# bash sumfile.sh
                    295
               
明天继续脚步发脚本内容

本文出自 “linux” 博客,请务必保留此出处http://001230.blog.51cto.com/11559496/1885992

以上是关于vim 文本编辑器shell脚本:的主要内容,如果未能解决你的问题,请参考以下文章

Linux:Vim 编辑器与 Shell 命令脚本

Vim编辑器与Shell命令脚本

Vim编辑器-Shell脚本

Vim编辑器与Shell命令脚本

vim编辑器与shell命令脚本

vim编辑器与shell命令脚本