Vim文本编辑器    

    默认会安装在当前所有的Linux操作系统上,对代码有着色功能,亦有些编程场景能够自动修正错误代码。
    Vim编辑器中设置了三种模式—命令模式、末行模式和编辑模式

    命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作
       dd       删除(剪切)光标所在整行
        5dd     删除(剪切)从光标处开始的5行
        yy        复制光标所在整行
        5yy      复制从光标处开始的5行
        n         显示搜索命令定位到的下一个字符串
        N        显示搜索命令定位到的上一个字符串
        u         撤销上一步的操作
        p         将之前删除(dd)或复制(yy)过的数据粘贴到光标后面

    输入模式:正常的文本录入
        输入a、i、o等键进入输入模式,Ese键退出输入模式

    
    末行模式:主要用于保存或退出文件
        在命令模式中输入一个冒号就可以了,常用:wq!,强制保存退出
    
    



    配置主机名称
        主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问。
        在Linux系统中,主机名大多保存在/etc/hostname文件中
        vim /etc/hostname             使用Vim编辑器修改etc/hostname主机名称文件,进入后自定义主机名
         hostname                            查看主机名称是否修改(可能要重启生效)
         hostnamectl set-hostname 主机名    修改主机名称,立即生效(不用重启)
    


编写Shell脚本
    Shell脚本的组成:脚本名称、脚本注释、脚本命令
        vim example.sh            编写脚本
         #!/bin/bash                  脚本的声明
         #For Example BY linuxprobe.com     脚本的注释
         pwd                              脚本的命令
         ls -al                             脚本的命令

    接收用户的参数
       $0         对应脚本的名称
        $#         对应用户总共输入多少个参数
        $*          对应用户输入的具体是哪些参数
        $?          对应上一次命令执行的返回值
        $数字    对应用户输入的第几个参数

    判断用户的参数
       文件测试语句;
        逻辑测试语句;
        整数值比较语句;
        字符串比较语句;
         文件测试语句即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符
         格式为[ 条件表达式 ]
       -d     测试文件是否为目录类型
        -e     测试文件是否存在
        -f     判断是否为一般文件
        -r     测试当前用户是否有权限读取
        -w     测试当前用户是否有权限写入
        -x     测试当前用户是否有权限执行
         [ -d /etc/fstab ]    
         echo $?        返回值为0结果为是,返回值为1结果就不是
           逻辑测试语句对测试结果进行逻辑分析,根据测试结果实现不同效果
       &&    当前面命令执行成功时,执行后面命令
        ||        当前面命令执行失败时,执行后面命令
        !      取反值    
        [ ! $USER = root ] && echo "user" || echo "root"    如果当前不是root用户,输出user,否则输出root
           整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,
           而且不能想当然地使用日常生活中的等号、大于号、小于号等来判断。
       -eq     是否等于
        -ne     是否不等于
        -gt      是否大于
        -lt        是否小于
        -le       是否等于或小于
        -ge      是否大于或等于        

        [ 10 -gt 10 ]    比较10是否大于10
        echo $?        返回值为1,不是
        [ `free -m | grep Mem: | awk '{print $4}'` -le 1024 ] && echo "不足" || echo "充足"
        提取示内存信息,打印第4个变量,比较是否小于1024,是则输出不足,不是则输出充足

              字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。
              它经常用来判断某个变量是否未被定义(即内容为空值)
        =                      比较字符串内容是否相同
        !=                     比较字符串内容是否不同
        -z                      判断字符串内容是否为空        
        [ -z $String ]    判断变量String是否被定义
         echo $?           输出结果为0代表没有被定义,输出1则代表被定义


流程控制语句
    if条件测试语句
    for条件循环语句
    while条件循环语句
    case条件测试语句

    if条件语句单分支结构、双分支结构、多分支结构
       单分支结构:

              if 条件测试语句
                    then   测试语句条件成立执行的命令序列
               fi
       双分支结构:
            if 条件测试语句
                    then   测试语句条件成立执行的命令序列
                    else    测试条件不成立执行的命令序列
            fi
       多分支结构:
            if 条件测试语句
                    then   测试语句条件成立执行的命令序列
            elif    上条测试条件若不成立,执行这条测试语句看是否成立,成立则执行下面的命令序列
                    then   测试语句条件成立执行的命令序列
             else    测试语句条件成立执行的命令序列
            fi

       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

        [root@linuxprobe ~]# bash chkscore.sh
        Enter your score(0-100):88
        88 is Excellent
        [root@linuxprobe ~]# bash chkscore.sh 
        Enter your score(0-100):80
        80 is Pass
    
    for条件循环语句
        for 变量名 in 取值列表
         do
            命令序列
        done    

        vim CheckHosts.sh
        #!/bin/bash
        HLIST=$(cat ~/ipaddrs.txt)
        for IP in $HLIST
        do
                    ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
                    if [ $? -eq 0 ];then
                                echo "Host $IP is On-line."
                    else
                                echo "Host $IP is Off-line."
                    fi
        done

        [root@linuxprobe ~]# ./CheckHosts.sh
        Host 192.168.10.10 is On-line.
        Host 192.168.10.11 is Off-line.
        Host 192.168.10.12 is Off-line.

    while条件循环语句
        while 条件测试操作
         do
            命令序列
        done

        [root@linuxprobe ~]# 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
                    elif [ $INT -gt $PRICE ] ; then
                                echo "太高了!"
                    else
                                echo "太低了!"
                    fi
        done

    case条件测试语句
        case 变量值 in 
        模式1
            命令序列
        ;;
        模式2    
            命令序列
        ;;
        *)    
            默认命令序列
        esac

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

        [root@linuxprobe ~]# bash Checkkeys.sh
        请输入一个字符,并按Enter键确认:6
        您输入的是 数字。
        [root@linuxprobe ~]# bash Checkkeys.sh
        请输入一个字符,并按Enter键确认:p
        您输入的是 字母。
        [root@linuxprobe ~]# bash Checkkeys.sh
        请输入一个字符,并按Enter键确认:^[[15~
        您输入的是 空格、功能键或其他控制字符。



计划任务服务程序
        at命令(一次性计划任务,执行一次):
            at 时间                编辑计划任务
              at -l                     查看已设置好但未执行计划的任务
              atrm 任务序号    删除计划任务(任务序号用at -l可查看)

             at 23:30
            warning: commands will be executed using /bin/sh
            at> systemctl restart httpd
            at> 此处请同时按下<Ctrl>+<d>键来结束编写计划任务
            job 1 at Wed Oct 14 23:30:00 2020
            [root@linuxprobe ~]# at -l
            1 Wed Oct 14 23:30:00 2020 a root
            [root@linuxprobe ~]# atrm 1
        crontab命令(长期性计划任务)
           crontab -e      创建、编辑计划任务
            crontab -l        查看当前计划任务
            crontab -r        删除某条计划任务
            编辑计划任务有6个字段依次是:
                   分钟、小时、日、月、星期、命令(以绝对路径的方式使用,先用where is 查找路径)
            计划任务中除了“分”字段必须要有数值,其他字段都可以由*占位,表示不设置
                   例如:2 * * * * reboot    每隔两分钟重启
            字段中逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,
            则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
            
           [root@linuxprobe ~]# crontab -e
            no crontab for root - using an empty one
            crontab: installing new crontab
            [root@linuxprobe ~]# crontab -l
            25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot       每周一、三、五凌晨3点25将wwwroot文件打包