zoukankan      html  css  js  c++  java
  • Linux就该这么学 20181003(第四章Vim/shell/测试条件)

    参考链接https://www.linuxprobe.com/ 

    vim文本编辑器
    命令模式:控制光标移动,可对文本进行复制,黏贴,删除和查找工作
    输入模式:正常的文本录入
    末行模式:保存或退出文档,以及设置编辑环境
    
    命令模式常用的一些命令
    dd    删除(剪切)光标所在整行
    5dd    删除(剪切)从光标处开始的5行
    yy    复制光标所在整行
    5yy    复制从光标处开始的5行
    n    显示搜索命令定位到的下一个字符串
    N    显示搜索命令定位到的上一个字符串
    u    撤销上一步的操作
    p    将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
    ggdG    删除全部
    
    魔航模式
    命令    作用
    :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
    ?字符串    在文本中从下至上搜索该字符串    
    /字符串    在文本中从上至下搜索该字符串
    ps: :%s/one/two/g 将全文的所有one替换成two
    
    
    使用a、i、o三个键从命令模式切换到输入模式。其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光
    
    标的下面再创建一个空行
    
    
    修改主机名
    vim /etc/hostname
    #linuxprobe.com  PS:重启后才生效 hostname
    
    配置网卡信息
    在RHEL5,6网卡配置文件都是以eth开头,第一块eth0,第二块eth1
    但是在RHEL7中 ,网卡配置文件以ifcfg开始 如ifcfg-eno16777736
    现在有一个名为ifcfg-eno16777736网卡设备,将其配置为开机自启动,并设置IP
    cd /etc/sysconfig/network-scripts目录中
    vim编辑器修改网卡文件 ,写入后保存
    设备类型:TYPE=Ethernet
    
    地址分配模式:BOOTPROTO=static
    
    网卡名称:NAME=eno16777736
    
    是否启动:ONBOOT=yes
    
    IP地址:IPADDR=192.168.10.10
    
    子网掩码:NETMASK=255.255.255.0
    
    网关地址:GATEWAY=192.168.10.1
    
    DNS地址:DNS1=192.168.10.1
    
    ##
    [root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/
    [root@linuxprobe network-scripts]# vim ifcfg-eno16777736
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=eno16777736
    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
    
    配置yum仓库
    第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。
    
    第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并
    
    保存退出(不要写后面的中文注释)。
    
    [rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突。
    
    name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处。
    
    baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。
    
    enabled=1:设置此源是否可用;1为可用,0为禁用。
    
    gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验。
    
    gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。
    
    第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。
    
    第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。
    
    进入/etc/yum.repos.d目录中后创建Yum配置文件:
    
    [root@linuxprobe ~]# cd /etc/yum.repos.d/
    [root@linuxprobe yum.repos.d]# vim rhel7.repo
    [rhel7]
    name=rhel7
    baseurl=file:///media/cdrom
    enabled=1
    gpgcheck=0
    
    创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章)。尝试使用Yum软件仓库来安装Web服务,出现Complete!则代表配置正
    
    确:
    
    [root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom
    [root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
    mount: /dev/sr0 is write-protected, mounting read-only
    [root@linuxprobe yum.repos.d]# vim /etc/fstab
    /dev/cdrom /media/cdrom iso9660 defaults 0 0
    [root@linuxprobe ~]# yum install httpd
    Loaded plugins: langpacks, product-id, subscription-manager
    ………………省略部分输出信息………………
    Dependencies Resolved
    ================================================================================
     Package Arch Version Repository Size
    ================================================================================
    Installing:
     httpd x86_64 2.4.6-17.el7 rhel 1.2 M
    Installing for dependencies:
     apr x86_64 1.4.8-3.el7 rhel 103 k
     apr-util x86_64 1.5.2-6.el7 rhel 92 k
     httpd-tools x86_64 2.4.6-17.el7 rhel 77 k
     mailcap noarch 2.1.41-2.el7 rhel 31 k
    Transaction Summary
    ================================================================================
    Install 1 Package (+4 Dependent packages)
    Total download size: 1.5 M
    Installed size: 4.3 M
    Is this ok [y/d/N]: y
    Downloading packages:
    --------------------------------------------------------------------------------
    ………………省略部分输出信息………………
    Complete!
    
    #参数
    [root@linuxprobe ~]# ./example.sh
    bash: ./Example.sh: Permission denied
    [root@linuxprobe ~]# chmod u+x example.sh
    
    $# 表示有多个参数
    $* 表示参数分别是
    $1 - $9 - ${10} 表示传的参数
    
    测试语句格式:  [ 条件表达式 ]
    文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,
    -d    测试文件是否为目录类型
    -f    判断是否为一般文件
    -e    测试文件是否存在
    -r    测试当前用户是否有权限读取
    -w    测试当前是否有写入权限
    -x    测试当前用户执行权限
    
    [ -d /root/tmp ] 
    echo $? #如果为真 0    假为1
    
    与    &&||!
    等于    ==
    
    [ $USER != root ] 
    echo $?
    
    
    
    整数比较运算符仅对数字进行操作
    -eq    是否等于
    -ne    是否不等于
    -gt    大于
    -lt    小于
    -le    小于或等于
    -ge    大于或等于
    
    [root@linuxprobe ~]# free -m
                total     used     free     shared     buffers     cached
    Mem:        1826      1244     582      9          1           413
    -/+ buffers/cache:    830 996
    Swap:       2047      0        2047
    [root@linuxprobe ~]# free -m | grep Mem:
    Mem:        1826      1244     582      9 
    [root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'
    582
    [root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
    [root@linuxprobe ~]# echo $FreeMem 
    [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
    
    字符串比较用于判断测试字符串是否为空值
    =    比较字符串内容是否相同
    !=    字符串内容不等于
    -z    判断字符串内容是否为空
    
    [ -z $String ]
    
    流程控制语句 if for while case
    
    下面使用单分支的if条件语句来判断/media/cdrom文件是否存在,若存在就结束条件判断和整个Shell脚本,反之则去创建这个目录:
    
    [root@linuxprobe ~]# vim mkcdrom.sh
    #!/bin/bash
    DIR="/media/cdrom"
    if [ ! -e $DIR ]
    then
    mkdir -p $DIR
    fi
    
    if
        then
        else
    fi
    
    
    if 条件测试    
        then 命令1
    elif 条件测试
        then 命令2
    fi
    
    
    for循环条件语句
    for 变量名 in 取值列表
    do
        命令序列
    done
    
    for 用户名 in 列表文件
    do    
        创建用户并设置密码
    done
    [root@linuxprobe ~]# 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"
    else
    echo "$UNAME , Create failure"
    fi
    fi
    done
    
    主机在线测试
    [root@linuxprobe ~]# vim CheckHosts.sh
    #!/bin/bash
    HLIST=$(cat ~/ipadds.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
    
    case条件测试语句
    case 变量值 in
    模式1)
        命令1
        ;;
    模式2)
        命令2
        ;;
    *)
        默认命令序列
    esac
    
    read -p "请输入一个字符,并按Enter键确认:" KEY
    case "$KEY" in
    [a-z]|[A-Z])
    echo "您输入的是 字母。"
    ;;
    [0-9])
    echo "您输入的是 数字。"
    ;;
    *)
    echo "您输入的是 空格、功能键或其他控制字符。"
    esac
    
    计划任务服务程序
    定时任务只执行一次 用at
    #at -l 查看定时任务列表
    #atrm 任务号 删除
    [root@linuxprobe ~]# at 23:30
    at > systemctl restart httpd
    at > 此处请同时按下Ctrl+d来结束编写计划任务
    job 3 at Mon Apr 27 23:30:00 2015
    
    
    crontab
    分    时    日    月    星期命令
    #crontab -e 编辑
    #crontab -l 罗列
    字段    说明
    分钟    取值为0~59的整数
    小时    取值为0~23的任意整数
    日期    取值为1~31的任意整数
    月份    取值为1~12的任意整数
    星期    取值为0~7的任意整数,其中0与7均为星期日
    命令    要执行的命令或程序脚本
    
    #假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理
    25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
    
    计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突
    
    1.Vim编辑模式三种分别是命令模式、末行模式、输入模式
    2. $0表示脚本文件名
    3.if then elif then else fi
    4.for 变量名 in 取值列表 do .. done
    5.根据用户输入的不同最好执行case条件语句
    6.唱起计划任务使用的服务是 crontab -e 分 时 日 月 星期

    vim文本编辑器命令模式:控制光标移动,可对文本进行复制,黏贴,删除和查找工作输入模式:正常的文本录入末行模式:保存或退出文档,以及设置编辑环境
    命令模式常用的一些命令dd删除(剪切)光标所在整行5dd删除(剪切)从光标处开始的5行yy复制光标所在整行5yy复制从光标处开始的5行n显示搜索命令定位到的下一个字符串N显示搜索命令定位到的上一个字符串u撤销上一步的操作p将之前删除(dd)或复制(yy)过的数据粘贴到光标后面ggdG删除全部
    魔航模式命令作用: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?字符串在文本中从下至上搜索该字符串    /字符串在文本中从上至下搜索该字符串ps: :%s/one/two/g 将全文的所有one替换成two

    使用a、i、o三个键从命令模式切换到输入模式。其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光
    标的下面再创建一个空行

    修改主机名vim /etc/hostname#linuxprobe.com  PS:重启后才生效 hostname
    配置网卡信息在RHEL5,6网卡配置文件都是以eth开头,第一块eth0,第二块eth1但是在RHEL7中 ,网卡配置文件以ifcfg开始 如ifcfg-eno16777736现在有一个名为ifcfg-eno16777736网卡设备,将其配置为开机自启动,并设置IPcd /etc/sysconfig/network-scripts目录中vim编辑器修改网卡文件 ,写入后保存设备类型:TYPE=Ethernet
    地址分配模式:BOOTPROTO=static
    网卡名称:NAME=eno16777736
    是否启动:ONBOOT=yes
    IP地址:IPADDR=192.168.10.10
    子网掩码:NETMASK=255.255.255.0
    网关地址:GATEWAY=192.168.10.1
    DNS地址:DNS1=192.168.10.1
    ##[root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/[root@linuxprobe network-scripts]# vim ifcfg-eno16777736TYPE=EthernetBOOTPROTO=staticNAME=eno16777736ONBOOT=yesIPADDR=192.168.10.10NETMASK=255.255.255.0GATEWAY=192.168.10.1DNS1=192.168.10.1
    systemctl restart network
    配置yum仓库第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。
    第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并
    保存退出(不要写后面的中文注释)。
    [rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突。
    name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处。
    baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。
    enabled=1:设置此源是否可用;1为可用,0为禁用。
    gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验。
    gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。
    第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。
    第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。
    进入/etc/yum.repos.d目录中后创建Yum配置文件:
    [root@linuxprobe ~]# cd /etc/yum.repos.d/[root@linuxprobe yum.repos.d]# vim rhel7.repo[rhel7]name=rhel7baseurl=file:///media/cdromenabled=1gpgcheck=0
    创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章)。尝试使用Yum软件仓库来安装Web服务,出现Complete!则代表配置正
    确:
    [root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrommount: /dev/sr0 is write-protected, mounting read-only[root@linuxprobe yum.repos.d]# vim /etc/fstab/dev/cdrom /media/cdrom iso9660 defaults 0 0[root@linuxprobe ~]# yum install httpdLoaded plugins: langpacks, product-id, subscription-manager………………省略部分输出信息………………Dependencies Resolved================================================================================ Package Arch Version Repository Size================================================================================Installing: httpd x86_64 2.4.6-17.el7 rhel 1.2 MInstalling for dependencies: apr x86_64 1.4.8-3.el7 rhel 103 k apr-util x86_64 1.5.2-6.el7 rhel 92 k httpd-tools x86_64 2.4.6-17.el7 rhel 77 k mailcap noarch 2.1.41-2.el7 rhel 31 kTransaction Summary================================================================================Install 1 Package (+4 Dependent packages)Total download size: 1.5 MInstalled size: 4.3 MIs this ok [y/d/N]: yDownloading packages:--------------------------------------------------------------------------------………………省略部分输出信息………………Complete!
    #参数[root@linuxprobe ~]# ./example.shbash: ./Example.sh: Permission denied[root@linuxprobe ~]# chmod u+x example.sh
    $# 表示有多个参数$* 表示参数分别是$1 - $9 - ${10} 表示传的参数
    测试语句格式:  [ 条件表达式 ]文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,-d测试文件是否为目录类型-f判断是否为一般文件-e测试文件是否存在-r测试当前用户是否有权限读取-w测试当前是否有写入权限-x测试当前用户执行权限
    [ -d /root/tmp ] echo $? #如果为真 0    假为1
    与&&或||非!等于==
    [ $USER != root ] echo $?


    整数比较运算符仅对数字进行操作-eq是否等于-ne是否不等于-gt大于-lt小于-le小于或等于-ge大于或等于
    [root@linuxprobe ~]# free -m            total     used     free     shared     buffers     cachedMem:        1826      1244     582      9          1           413-/+ buffers/cache:    830 996Swap:       2047      0        2047[root@linuxprobe ~]# free -m | grep Mem:Mem:        1826      1244     582      9 [root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'582[root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`[root@linuxprobe ~]# echo $FreeMem [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
    字符串比较用于判断测试字符串是否为空值=比较字符串内容是否相同!=字符串内容不等于-z判断字符串内容是否为空
    [ -z $String ]
    流程控制语句 if for while case
    下面使用单分支的if条件语句来判断/media/cdrom文件是否存在,若存在就结束条件判断和整个Shell脚本,反之则去创建这个目录:
    [root@linuxprobe ~]# vim mkcdrom.sh#!/bin/bashDIR="/media/cdrom"if [ ! -e $DIR ]thenmkdir -p $DIRfi
    ifthenelsefi

    if 条件测试then 命令1elif 条件测试then 命令2fi

    for循环条件语句for 变量名 in 取值列表do命令序列done
    for 用户名 in 列表文件do创建用户并设置密码done[root@linuxprobe ~]# vim Example.sh#!/bin/bashread -p "Enter The Users Password : " PASSWDfor UNAME in `cat users.txt`doid $UNAME &> /dev/nullif [ $? -eq 0 ]thenecho "Already exists"elseuseradd $UNAME &> /dev/nullecho "$PASSWD" | passwd --stdin $UNAME &> /dev/nullif [ $? -eq 0 ]thenecho "$UNAME , Create success"elseecho "$UNAME , Create failure"fifidone
    主机在线测试[root@linuxprobe ~]# vim CheckHosts.sh#!/bin/bashHLIST=$(cat ~/ipadds.txt)for IP in $HLISTdoping -c 3 -i 0.2 -W 3 $IP &> /dev/nullif [ $? -eq 0 ] ; thenecho "Host $IP is On-line."elseecho "Host $IP is Off-line."fidone[root@linuxprobe ~]# ./CheckHosts.shHost 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
    case条件测试语句case 变量值 in模式1)命令1;;模式2)命令2;;*)默认命令序列esac
    read -p "请输入一个字符,并按Enter键确认:" KEYcase "$KEY" in[a-z]|[A-Z])echo "您输入的是 字母。";;[0-9])echo "您输入的是 数字。";;*)echo "您输入的是 空格、功能键或其他控制字符。"esac
    计划任务服务程序定时任务只执行一次 用at#at -l 查看定时任务列表#atrm 任务号 删除[root@linuxprobe ~]# at 23:30at > systemctl restart httpdat > 此处请同时按下Ctrl+d来结束编写计划任务job 3 at Mon Apr 27 23:30:00 2015

    crontab分时日月星期命令#crontab -e 编辑#crontab -l 罗列字段说明分钟取值为0~59的整数小时取值为0~23的任意整数日期取值为1~31的任意整数月份取值为1~12的任意整数星期取值为0~7的任意整数,其中0与7均为星期日命令要执行的命令或程序脚本
    #假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
    计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突
    1.Vim编辑模式三种分别是命令模式、末行模式、输入模式2. $0表示脚本文件名3.if then elif then else fi4.for 变量名 in 取值列表 do .. done5.根据用户输入的不同最好执行case条件语句6.唱起计划任务使用的服务是 crontab -e 分 时 日 月 星期

  • 相关阅读:
    miragejs 学习
    json-server学习
    react-redux
    webpack4知识汇总2
    webpack4知识汇总1
    vue跳转当前页面
    redux初识
    react知识补漏2
    vue ssr
    状态码
  • 原文地址:https://www.cnblogs.com/Liang-jc/p/9741356.html
Copyright © 2011-2022 走看看