美文网首页
Vim编辑器与Shell命令脚本

Vim编辑器与Shell命令脚本

作者: 在牛魔角上狂码 | 来源:发表于2018-11-25 23:58 被阅读0次

    Vim编辑器


    vim编辑器有三种模式:命令模式、输入模式、末行模式
    命令模式:控制光标移动,可对文本进行复制、黏贴、删除和查找等工作
    输入模式:正常的文本录入
    末行模式:保存或退出文档,以及设置编辑环境

    image.png

    vim命令模式中常用的命令:

    命令 作用
    dd 删除(剪切)光标所在整行
    5dd 删除(剪切)从光标处开始的5行
    yy 复制光标所在整行
    5yy 复制从光标处开始的5行
    n 显示搜索命令定位到的下一个字符
    N 显示搜索命令定位到的上一个字符串
    u 撤销上一步的操作
    p 将之前删除(dd)或复制(yy)过的数据黏贴到光标后面

    末行模式中可用的命令:

    命令 作用
    :w 保存
    :q 退出
    :q! 强制退出(放弃对文档的修改内容)
    :wq! 强制保存退出
    :set nu 显示行号
    :set nonu 不显示行号
    :命令 执行该命令
    :整数 跳转到该行
    :s/one/two 将当前光标所在行的第一个one替换成two
    :s/one/two/g 将当前光标所在行的所有one替换成two
    :%s/one/two/g 将全文中的所有one替换成two
    ?字符串 在文本中从下至上搜索该字符串
    /字符串 在文本中从上至下搜索该字符串

    修改主机名:

    vim /etc/hostname
    //将原来的主机名删除掉,输入新的主机名
    :wq
    //保存并退出
    hostname
    //查看当前的主机名,如果显示还是原来的主机名,则重启系统后再查看
    //重启
    reboot
    

    配置网卡信息:

    //每台设备的硬件和架构不一样,所欲网卡的名称也是不一样,我这里的名称是ifcfg-enp0s3
    vim /etc/sysconfig/network-script/ifcfg-enp0s3
    
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=enp0s3
    ONBOOT=yes
    IPADDR=192.168.10.10
    NETMASK=255.255.255.0
    GATEWAY=192.168.10.1
    DNS1=192.168.10.1
    
    //重启网卡
    systemctl restart network
    //ping新的ip看看是否ping得通
    ping 192.168.10.10
    //ctrl + c 终止
    //查看IP是否修改为新的192.168.10.10
    ifconfig
    

    设备类型:TYPE
    地址分配模式:BOOTPROTO
    网卡名称:NAME
    是否启动:ONBOOT
    IP地址:IPADDR
    子网掩码:NETMASK
    网关地址:GATEWAY
    DNS地址:DNS1

    配置Yum软件仓库:

    //进入到/etc/yum.repos.d目录中,创建一个名为centos7.repo的新配置文件,文件名称可以随意取,但文件的后缀必须为.repo
    vim /etc/yum.repos.d/centos7.repo
    
    [centos7]
    name=centos7
    baseurl=file:///media/cdrom
    enabled=1
    gpgcheck=0
    
    mkdir -p /media/cdrom
    
    mount /dev/cdrom /media/cdrom
    
    vim /etc/fstab
    
    /dev/cdrom /media/cdrom iso9660 default 0 0
    
    yum install httpd
    

    [centos]:Yum软件仓库唯一标识符。避免与其他仓库冲突
    name=chase:Yum软件仓库的名称描述,易于识别仓库用处
    baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://...)、HTTP(http://...)、本地(file://...)
    enabled=1:设置此源是否可用;1为可用、0为禁用
    gpgcheck=1:设置此源是否为校验文件;1为校验、0为不校验
    gppkey=file:///media/cdrom/PRM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址

    image.png

    编写Shell脚本


    shell脚本的工作方式有两种:交互式和批处理
    交互式:用户每输入一条命令就立即执行
    批处理:由用户事先编写好一个完整的shell脚本,shell会一次性执行脚本中诸多命令

    执行脚本:
    1、使用bash命令

    bash example.sh
    

    2、通过输入完整路径的方式来执行

    image.png

    shell脚本通过接受参数来灵活工作
    $#:总共有几个参数
    $*:对应所在位置的参数值
    $?:显示上一次命令的执行返回值
    $1、$2、$3...:对应着第N个位置的参数值

    vim example.sh
    
    image.png image.png

    判断用户输入的参数

    条件测试语法的执行格式:[ 条件表达式 ]
    注:条件表达式的两边均有一个空格

    条件测试语句分为4种:
    文件测试语句:使用指定条件来判断文件是否存在或权限是否满足等情况
    逻辑测试语句:用户对测试结果进行逻辑分析,根据测试结果可实现不同的效果
    整数值比较语句:使用规范的整数比较运算符来对数字进行操作
    字符串比较语句:用于判断测试字符串是否为空值

    文件测试所用的参数:

    运算符 作用
    -d 测试文件是否为目录类型
    -e 测试文件是否存在
    -f 判断是否为一般文件
    -r 测试当前用户是否有权限读取
    -w 测试当前用户是否有权限写入
    -x 测试当前用户是否有权限执行
    //判断 /etc/fstab 是否为一个目录类型的文件
    [ -d /etc/fstab ]
    echo $?
    //$?显示上一条命令执行后的返回值。返回值为0,表示目录存在;返回值为非零的值,表示目录不存在
    1
    

    逻辑语句分运算符:
    &&:逻辑与,表示当前面的命令执行成功后才会执行它后面的命令
    ||:逻辑或,表示当前面的命令执行失败后才会执行它后面的命令
    !:逻辑非,表示把条件测试中的判断结果取相反值

    可用的整数比较运算符

    运算符 作用
    -eq 是否相等
    -ne 是否不相等
    -gt 是否大于
    -lt 是否小于
    -le 是否小于或等于
    -ge 是否大于或等于

    常见的字符串比较运算符:

    运算符 作用
    = 比较字符串内容是否相同
    != 比较字符串内容是否不同
    -z 判断字符串内容是否为空

    流程控制语句

    if条件测试语句:


    image.png
    vim mkcdrom.sh
    
    #!/bin/bash
    DIR="/media/cdrom"
    if [ ! -e $DIR ]
    then
    mkdir -p $DIR
    fi
    
    bash mkcdrom.sh
    
    ls -d /media/cdrom
    //显示
    /media/cdrom
    
    image.png
    vim chkhost.sh
    
    #!/bin/bash
    ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
    if [ $? -eq 0 ]
    then
    echo "Host $1 is On-line."
    else
    echo "Host $1 is Off-line."
    fi
    
    bash chkhost.sh 192.168.10.10
    //显示
    Host 192.168.10.10 is On-line.
    
    bash chkhost.sh 192.168.10.20
    //显示
    Host 192.168.10.20 is Off-line.
    

    -c:规定尝试的次数
    -i:定义每个数据包的发送间隔
    -W:定义等待超时时间

    image.png
    vim chkscore.sh
    
    #!/bin/bash
    read -p "Enter your score(0-100):" GRADE
    if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
    echo "$GRADE is Excellent"
    elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
    echo "$GRADE is Pass"
    else
    echo "$GRADE is Fail" 
    fi
    
    bash chkscore.sh
    //显示
    Enter your score(0-100):88
    //显示
    88 is Excellent
    
    bash chkscore.sh 
    //显示
    Enter your score(0-100):80
    //显示
    80 is Pass
    

    read:用来读取用户输入信息的命令
    -p:用于向用户显示一定的提示信息

    for条件循环语句


    image.png

    批量创建用户与设置用户密码:

    vim users.txt
    
    andy
    sum
    zidung
    
    vim Example.sh
    
    #!/bin/bash
    read -p "Enter The Users Password : " PASSWD
    for UNAME in `cat users.txt`
    do
    id $UNAME &> /dev/null
    if [ $? -eq 0 ]
    then
    echo "Already exists"
    else
    useradd $UNAME &> /dev/null
    echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
    if [ $? -eq 0 ]
    then
    echo "$UNAME , Create success. The password for $PASSWD"
    else
    echo "$UNAME , Create failure."
    fi
    fi
    done
    
    bash Example.sh
    //显示
    Enter The Users Password : 123
    //显示
    andy, Create success. The password for 123
    sum, Create success. The password for 123
    zidung, Create success. The password for 123
    

    注:/dev/null 是一个被称作Linux黑洞的文件,把输入信息重定向到这个文件等同删除数据(类似于没有回收功能的垃圾箱)可以让用户的屏幕窗口保持简洁

    while条件循环语句

    image.png
    vim Guess.sh
    
    #!/bin/bash
    PRICE=$(expr $RANDOM % 1000)
    TIMES=0
    echo "商品实际价格为0-999之间,猜猜看是多少?"
    while true
    do
    read -p "请输入您猜测的价格数目:" INT
    let TIMES++
    if [ $INT -eq $PRICE ] ; then
    echo "恭喜您答对了,实际价格是 $PRICE"
    echo "您总共猜测了 $TIMES 次"
    exit 0
    elif [ $INT -gt $PRICE ] ; then
    echo "太高了!"
    else
    echo "太低了!"
    fi
    done
    
    bash Guess.sh
    //显示
    商品实际价格为0-999之间,猜猜看是多少?
    请输入您猜测的价格数目:500
    太低了!
    请输入您猜测的价格数目:800
    太高了!
    请输入您猜测的价格数目:650
    太低了!
    请输入您猜测的价格数目:720
    太高了!
    请输入您猜测的价格数目:690
    太低了!
    请输入您猜测的价格数目:700
    太高了!
    请输入您猜测的价格数目:695
    太高了!
    请输入您猜测的价格数目:692
    太高了!
    请输入您猜测的价格数目:691
    恭喜您答对了,实际价格是 691
    您总共猜测了 9 次
    

    case条件测试语句

    image.png
    vim Checkkeys.sh
    
    #!/bin/bash
    read -p "请输入一个字符,并按Enter键确认:" KEY
    case "$KEY" in
    [a-z]|[A-Z])
    echo "您输入的是 字母。"
    ;;
    [0-9])
    echo "您输入的是 数字。"
    ;;
    *)
    echo "您输入的是 空格、功能键或其他控制字符。"
    esac
    
    bash Checkkeys.sh
    //显示
    请输入一个字符,并按Enter键确认:6
    您输入的是 数字。
    
    bash Checkkeys.sh
    //显示
    请输入一个字符,并按Enter键确认:p
    您输入的是 字母。
    
    bash Checkkeys.sh
    //显示
    请输入一个字符,并按Enter键确认:^[[15~
    您输入的是 空格、功能键或其他控制字符。
    

    计划任务服务程序

    一次性计划任务:

    设置今晚23点30分开启网站服务
    格式:at 时间

    at 23:30
    //同时按下 Ctrl + D组合键来结束编写计划任务
    

    查看已设置号但还未执行的一次性计划任务

    at -l
    //显示
    1 Wed Nov 21 23:30:00 2018 a root
    

    删除已设置的一次性计划任务:
    格式:atrm 任务序列号

    at 1
    
    长期性计划任务:

    crontab -e:创建、编辑计划任务
    crontab -l:查看当前计划任务
    crontab -r:删除某条计划任务
    格式:* * * * * 命令 分别对应 分、时、日、月、周 命令

    注:如果是管理员,可以加上 -u 参数来编辑他人的计划任务

    使用crond设置任务的参数字段说明

    字段 说明
    取值为0~59的整数
    取值为0~23的任意整数
    取值为1~31的任意整数
    取值为1~12的任意整数
    取值为0~7的任意整数,其中0与7均为星期日
    命令 要执行的命令或程序脚本

    每周一的凌晨3点25分把/home/wwwroot目录打包备份为backup.tar.gz

    crontab -e
    
    30 3 * * 1 /usr/bin/tar -czvf bacup.tar.gz /home/wwwroot
    

    查看已创建的计划任务

    crontab -l
    //显示
    30 3 * * 1 /usr/bin/tar -czvf bacup.tar.gz /home/wwwroot
    

    相关文章

      网友评论

          本文标题:Vim编辑器与Shell命令脚本

          本文链接:https://www.haomeiwen.com/subject/vjckqqtx.html