Vim编辑器与Shell命令脚本

➢ Vim 文本编辑器
➢ 编写 Shell 脚本
➢ 流程控制语句
➢ 计划任务服务程序
Vim文本编辑器
Linux系统中的一切都是文件,而配置一个服务j就是在修改其配置文件的参数
vim编辑器中设置了三种模式:命令模式、末行模式和编辑模式
    命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作
    输入模式:正常的文本录入
    末行模式:保存或退出文档,以及设置编辑环境

输入模式:vim文件后不可以直接输入,要进行以下命令后才可以进入输入↓

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

末行模式中使用的命令

作用命令
保存:w
退出:q
强制退出(放弃对文档的修改内容):q!
强制保存退出:wq!
显示行号:set nu
不显示行号:set nonu
执行该命令:命令
跳转到该行:整数
将当前光标所在行的指定的第一个字符A替换成指定字符B😒/A/B
将当前光标所在行的所有指定字符A替换成指定字符B:%s/A/B/g
在文本中从下到上搜索该字符?字符串
在文本中从上到下搜索该字符/字符串
配置主机名称
  1. 查看主机名称 cat /etc/hostname
  2. 修改主机名称 echo “hostnames” > /etc/hostname 或使用 vim /etc/hostname 把原名称删除然后改为hostnames
配置网卡信息

可以修改/etc/sysconfig/network-script/ifcfg-ens33文件

设备类型:TYPE=Ethernet
地址分配模式: BOOTPROTO=static
网卡名称: NAME=ens33
是否启动:ONBOOT=yes
IP地址:IPADDR=192.168.15.129
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=192.168.15.2
DNS地址:DNS1=144.144.144.144
    一般配置BOOTPROTO为static
            IPADDR配置一个网段内的ip地址
            NETMASK为255.255.255.0
            GATEWAY设置网关,与ip在同一网段内
            DNS1设置144.144.144.144
    然后重启服务: systemctl restart network
编写Shell脚本
执行shell脚本使用sh xxx.sh
在shell脚本中进行脚本声明使用#!
在shell脚本中注释使用的是#
shell除了支持各种变量与参数外,还提供了循环、分支等高级编程语言才有的控制结构特性
    交互式:用户每输入一条命令就立即执行
    批处理:由用户事先编写好一个完整的shell脚本,shell会一次性执行脚本中的所有命令
可以通过查看SHELL变量来显示命令行终端解释器Bash   -> echo $SHELL
例: 
    vim atest.sh
        #第一个shell脚本文件
        #打印当前路径,显示当前目录下所有文件
        pwd
        ls -lah
    sh atest.sh
接受用户参数
在执行shell脚本时可以给脚本中传入参数:
    $0对应的是脚本名称
    $#对应的是脚本的个数
    $*对应的是所有脚本的内容
    $?对应的是上一次命令执行的返回值
    $[1-∞]对应的是第几个参数(如$1对应的第一个参数$2对应第二个参数)
例: 
    vim btest.sh
    echo "脚本的名称为$0"
    echo "脚本的参数个数为$#"
    echo "脚本的参数分别为$*"
    echo "脚本的第六个参数为$6"
    echo "脚本的上一次命令返回值为$?,由于上一个命令没有返回值所有返回0"
判断用户参数
shell中的测试语法可以判断表达式是否成立,如果成立就返回0,如果不成立就随即返回一个数字,执行后该命令不会返回值,可以配合$?来输出上一次命令返回的值
    测试语法格式为(在条件表达式的两端各有一个空格):[ 条件表达式 ]
按照测试对象划分条件测试语句为: 
    1>文件测试语句
    2>逻辑测试语句
    3>整数比较语句
    4>字符串比较语句

文件测试所用参数为:

作用命令
测试文件是否为目录类型-p
测试文件是否存在-e
判断是否为一般文件-f
测试当前对象是否有权限读取-r
测试当前对象是否有权限写入-w
测试当前对象是否有权限执行-x
例:
    [ -p atest.sh ]
    echo $?
    执行后如果该文件是目录就会返回0,如果不是目录就会返回非零随机数
    [ -e atest.sh ]
    echo $?
    执行后如果文件存在就返回0,如果不存在就返回非零随机数
    [ -r atest.sh ]
    echo $?
    ...
    参数不可有多个,如[ -pefrwx atest.sh ]是不允许的
    
也可以配合逻辑运算符(&&、||、!)来执行测试语法:
    例: 通过测试语法判断文件是否存在,如果存在通过&&来输出"存在"
        [ -e atest.sh ] && echo "存在"
        &&是如果测试语句返回正确就会执行&&后面的语句,如果文件存在就会打印"存在" 
            ->也可以判断当前用户是否为指定用户[ $USER = root ] && echo "root正在使用"
    例: 通过测试语法判断当前是否为目录,如果不是就通过||输出"不是目录"
        [ -p atest.sh ] || echo "不是目录"
    例: 通过判断!判断当前用户是否为root,如果是就返回当前用户是root
        [ !$USER = root] || echo "当前用户是root"
    例: 通过逻辑运算实现三元运算符类似效果
        判断当前登录用户是否为root,如果不为root返回正确执行&&后输出,如果为root执行||后输出
        [ !$USER = root ] $$ echo "当前登录用户不为root" || echo "当前登录用户为root"

可以使用字符串比较语句,字符串比较一般用来比较字符串内容是否相同,是否不同,是否为空
作用命令
字符串内容是否相同=
字符串内容是否不同!=
字符串内容是否为空-z
例: 
    

还可以使用整数比较运算符,整数比较运算符不可以与字符串或文件等一起操作,只能整数和整数,而且不可以直接使用大于等于小于等,因为这些会与系统字符产生冲突,如<和>号在系统中指的是输入和输出重定向,等号指的的赋值操作,所有要使用整数比较运算符就必须使用以下运算符替换:
作用命令
是否大于-gt
是否小于-lt
是否等于-eq
是否不等于-ne
是否大于或等于-ge
是否小于或等于-le
例: [ 6 -eq 8 ]
    echo
让变量中存放命令可以使用``来包住命令赋值给变量
例: 将显示系统内存剩余量将Mem行显示,然后再显示free列的命令赋值给FreeMem
    FreeMem=`free -m | grep Mem | awk '{print $4}'`
可以配合测试语句查看内存剩余量:
    [ $FreeMem -lt 1024 ] && echo '所剩内存小于1024' ||echo "所剩内存小于1024"
流程控制语句
if条件语句
if条件测试语句由if、then、else、elif、fi关键字组成
    例:
        ATEXT="a"
        if [ ! -e $ATEXT ]
            then touch a
                 echo "a已创建"
        fi
    例: 
        ATEXT="a"
        if [ ! -e $ATEXT ]
            then touch a
                 echo "a已创建"
        else
            echo "a已存在"
        fi
    
    例: 
        ping命令中-c是规定尝试次数,-i是定义每个数据包发送的间隔,-W是定义等待超时时间
        /dev/null被称作linux黑洞文件,把输出信息重定向到这个文件中等同于删除数据(类似于没有回收功能的垃圾桶),可以让将无用语句输出到这里,让其不在窗口显示
        
        read命令可以读取用户输入的信息赋值给后面的变量,参数-p可以给用户显示提示信息——>read -p "请输入一个数字" NUMS
        例:
            read -p "请输入你的成绩" NUMS
            if [ $NUMS -ge 0 ] && [ $NUMS -lt 60 ]
                then echo "成绩不合格"
            elif [ $NUMS -ge 60 ] && [ $NUMS -lt 80 ]
                then echo "成绩合格"
            elif [ $NUMS -ge 80 ] && [ $NUMS -le 100 ]
                then echo "成绩优秀"
            else 
                echo "输入成绩错误"
            fi
for循环语句
语法:
    for 变量名 in 循环列表
        do
            命令序列
    done
例: 
    先建一个文件然后里面每行输入一个单词,文件名为abc.txt
    #循环abc文件,然后在其每行后添加abc然后输出
    for TXTV in `cat abc.txt`
        on echo "$TXTV"abc
    done
例: 
    将地址卸载pings.txt文件中,然后循环ping里面的地址
    #!这个是ping的脚本
    PINGS=`cat /home/test/pings.txt`
    for TXTPING in $PINGS
        on
            ping -c 3 -i 1 -W 3 $TXTPING &> /dev/null
            if [ $? -eq 0 ]
                then echo ping"$TXTPING"成功啦
            else 
                echo ping"$TXTPING"失败啦
            fi
    done
while循环语句
exit 0可以退出循环
语法:
    while 条件是否满足
        do
            命令序列
    done
例:
    一个开了外挂的猜数字游戏
    RANDOMS=$RANDOM
    #开启外挂获取参数
    echo "$RANDOMS"
    #设置一个会自增的值代表次数
    VALUES=0
    while true
        do
        echo 第"$VALUES"回合
        read -p "请输入一个数字:" NUMS
        let VALUES++
        if [ $RANDOMS -eq $VALUES ]
            then echo "猜对啦"
            exit 0
        elif [ $RANDOMS -gt $VALUES ]
            then echo "猜小了"
        else
            echo "猜大了"
        fi
    done
case条件语句
相当于java中的switch..case..defualt
语法:
    case 变量值 in
        条件一)
            命令序列一
        ;;
        条件二)
            命令序列二
        ;;
        ......
        *)
            默认命令序列
    esac
例:
    输入一个字符串,判断是数字、字母还是其他
    read -p "请输入一个字符串" VALUES
    case $VALUES in
        [a-z]|[A-Z])
            echo "是字母"
        ;;
        [0-9])
            echo "是数字"
        ;;
        *)
            echo "是其他"
    esac
计划任务服务程序
设置服务器的计划任务服务,把周期性、规律性的工作设为系统计划,让系统自动完成,也可以在里面使用#来添加注释
    *需要注意的的是计划任务中的"分"必须有数值(不能为空或*),且日和星期字段不能同时使用,否则就会发生冲突
    > 一次性任务,在设置是默认采用交互式方式,使用ctrl+d来结束编写计划
        >> 设置: at 时间
        >> 查看所有一次性任务: at -l
        >> 删除一次性任务: atrm 任务序号
    例: 
        通过"at 时间"采用默认交互式创建一次性调度
        #设置
        at 00:00
        ...
        ctrl+d结束编辑
        
    > 周期性任务,crond服务
        >> 创建、编辑: crontab -e
        >> 查看所有周期性任务: crontab -l
        >> 删除周期性任务: crontab -r
        >> 如果使用的root用户还可以加-u参数来编辑其他用户的周期性任务
        时间周期设置: 分钟 小时 日 月 星期
            访问:"https://tool.lu/crontab/"在线拼时间
            分钟: 取值为0~59
            小时: 取值为0~23
            日: 取值为1~31
            月: 取值为1~12
            星期: 取值为0~7(0和7都为周日)
        可以使用(,)来分别单独添加时间点(如:字段"日"取值->"1,5,9"),也可以使用(-)来表示一段时间点(如:字段"日"取值->"1-15",直接取1-15日),用(/)表示执行任务的间隔时间(如:"*/6"表示每2分钟执行一次)
    例: 
        设置每周六日的6点7分创建一个文件
        crontab -e
        7 3 * * 6,7 touch /home/test/a.txt
        #查看一下
        crontab -l
        #删除周期性任务
        crontab -r
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值