• Vim编辑器与Shell命令脚本


    1.Vim文本编辑器

    默认安装在当前所有Linux系统中的文本编辑器,有三种模式:

    1.命令模式:控制光标移动,可对文本复制、粘贴、删除、查找等。
    2.输入模式:正常的文本录入。
    3.末行模式:保存或退出文档,以及设置编辑环境。

    默认为命令模式,需先切换至输入模式再进行文档编写,编写完毕需先返回命令模式,再进入末行模式,执行文档保存或退出。无法直接从输入模式切换至末行模式。

    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
    • ?字符串 :在文本中从下至上搜索该字符串
    • /字符串 :在文本中从上至下搜索该字符串

    1.1 编写简单文档

    首先打开文档practice.txt,如果文档不存在,则创建一个临时的输入文件。

    这里默认是命令模式,不能随意输入文本,需要按下a、i 或 o 键方能切换至输入模式,其中,a 和 i 分别表示在光标后一位和光标当前位置切换到输入模式,o 则是在光标的下面再创建一个空行,此时敲击 a 键进入输入模式。

    然后便可以输入文本。

    如果想要保存,必须先按下Esc键退出输入模式 返回命令模式,然后再输入 :wq! 切换到末行模式才能完成保存退出操作。

    然后就可以查看文档的内容了

    如果要在原有文档后面追加内容,则从命令模式切换至输入模式时,使用 o 键更加方便。

    1.2 配置主机名称

    为了便于在局域网中查找某台特定的主机,或者对主机进行区分,除了要有IP地址外,还要为主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问。在Linux
    系统中,主机名大多保存在/etc/hostname文件中,接下来将/etc/hostname文件的内容修改为“linuxprobe.com”,步骤如下。

    第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件。

    第2步:把原始主机名称删除后追加“linuxprobe.com”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。

    第3步:保存并退出文档,然后使用hostname命令检查是否修改成功。

    hostname命令用于查看当前的主机名称,但有时主机名称的改变不会立即同步到系统中,所以如果发现修改完成后还显示原来的主机名称,可重启虚拟机后再行查看

    1.3 配置网卡信息

    网卡IP地址配置的是否正确是两台服务器是否可以相互通信的前提。在Linux系统中,一切都是文件,因此配置网络服务的工作其实就是在编辑网卡配置文件

    在RHEL 7中,网卡配置文件的前缀以ifcfg开始,加上网卡名称共同组成了网卡配置文件的名字,例如ifcfg-eno16777736,ifconfig-ens32 等

    配置网卡设备为开机启动,并且IP地址、子网、网关等信息由人工指定,步骤如下:

    1. 首先切换到 /etc/sysconfig/network-scripts 目录中(存放着网卡的配置文件)

    2. 使用Vim编辑器修改网卡文件ifcfg-ens32,逐项写入下面的配置参数并保存退出。由于每台设备的硬件及架构是不一样的,可使用ifconfig命令确认网卡的默认名称

    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens32
    ONBOOT=yes
    IPADDR=192.168.10.10
    NETMASK=255.255.255.0
    GATEWAY=192.168.10.1
    DNS1=192.168.10.1

    1. 重启网络服务并测试网络是否连通

    执行重启网卡设备的命令(在正常情况下不会有提示信息),然后通过ping命令测试网络能否联通。由于在Linux系统中ping命令不会自动终止,因此需要手动按下Ctrl-c键来强行结束进程。

    1.4 配置Yum软件仓库

    Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。可以把Yum想象成是一个硕大的软件仓库,里面保存有几乎所有常用的
    工具,而且只需要说出所需的软件包名称,系统就会自动为您搞定一切。

    搭建并配置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软件仓库是否已经可用。

    2.编写Shell脚本

    Shell脚本命令的工作方式有两种:交互式和批处理。

    交互式(Interactive):用户每输入一条命令就立即执行。

    批处理(Batch):由用户事先编好一个完整的Shell脚本,Shell会一次性的执行脚本中的诸多命令。

    查看SHELL变量发现系统已默认使用Bash作为命令行的终端解释器了。

    2.1 编写简单的脚本

    创建example.sh并写入如下内容

    Shell脚本的文件可以任意命名,但是为了避免被误认为普通文件,一般以 .sh 后缀命名。

    上面的文件中出现了三总不同的元素:

    第一行的脚本声明(#!)告诉系统使用哪种Shell解释器执行脚本;

    第二行的注释信息(#)是对脚本功能和某些命令的介绍;

    第三、四行是可执行语句,即Linux命令。

    执行结果如下:

    除了通过bash命令直接运行Shell脚本之外,还可以通过输入完整路径的方式来执行。这种方式默认会因为权限不足报错,此时只需为脚本文件增加执行权限即可。

    2.2 接收用户的参数

    上文脚本命令过于死板,为了能够接收用户的参数,可以使用Linux内设的用于接受参数的变量。

    $0:当前Shell脚本程序的名称
    $#:总共有几个参数
    $*:所有位置的参数值
    $?:显示上一次命令的执行返回值
    $1、$2、$3...分别对应第1个、第2个、第3个位置的参数值,以此类推。

    examle.sh:

    执行

    2.3 判断用户的参数

    Shell脚本中的条件测试语法可以判断表达式是否成立,若成立返回数字0,否则返回其他随机数。条件测试语句格式:[ 条件表达式 ],条件表达式两边均应有一个空格。

    按测试对象划分,条件测试语句可分为四种:文件测试语句、逻辑测试语句、整数值比较语句、字符串比较语句。

    文件测试即使用指定条件来判断文件是否存在 或 权限是否满足等情况的运算符。文件测试的运算符及其作用:

    -d:测试文件是否为目录类型
    -e:测试文件是否存在
    -f:判断是否为一般文件
    -r:测试当前用户是否有权限读取
    -w:测试当前用户是否有权限写入
    -x:测试当前用户是否有权限执行

    判断 /etc/fstab 是否为一个目录类型的文件,返回值不是0,所以不是一个目录类型的文件。

    返回值为0,所以 /etc/fstab 是个一般文件。

    && 在Shell中是逻辑“与”的运算符,表示前面的命令执行成功才会执行它后面的命令。

    || 表示逻辑“或”,前面命令执行失败才会执行后面的。

    还有一种逻辑语句是“非”,符号为感叹号(!),表示把条件测试中的判断结果取相反值。

    整数比较运算仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然的使用日常生活中的大于小于和等号。因为等号与赋值命令冲突,大于小于号与输出和输入重定向符号冲突。规范的整数比较运算符如下:

    -eq:是否等于
    -ne:是否不等于
    -gt:是否大于
    -lt:是否小于
    -le:是否小于或等于
    -ge:是否大于或等于

    字符串比较语句用于判断测试字符串是否为空,或两个字符串是否相同。运算符如下:

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

    String变量为空,即未定义该变量。

    3.流程控制语句

    3.1 if条件测试语句

    ① if条件语句的单分支结构由if、then、fi 关键字组成,语法格式:

    if 条件测试操作
    then 命令序列
    fi

    此例即为通过单分支的if语句完成的文件创建。

    ② if的双分支结构由if、then、else、fi 关键字组成,语法格式:

    if 条件测试操作
    then 命令序列1
    else 命令序列2
    fi

    ping命令测试与对方主机网络联通性,-c 规定尝试次数, -i 定义每个数据包的发送间隔, -W 定义等待超时时间。

    ③ if多分支结构由if、then、else、elif、fi 关键字组成,语法格式:

    if 条件测试操作
    then 命令序列1
    elif 条件测试操作2
    then 命令序列2
    else 命令序列3
    fi

    read命令用于读取用户输入信息,能把接收到的用户输入信息赋值给后面的指定变量, -p 表示向用户显示一定的提示信息。

    3.2 for条件循环

    for循环允许脚本一次读取多个信息,然后逐一对信息进行操作处理,语法格式:

    for 变量名 in 取值列表
    do 命令序列
    done

    3.3 while条件循环语句

    语法格式:

    while 条件测试操作
    do 命令序列
    done

    以下便是一个通过while循环来猜测数值大小的脚本 Guess.sh

    $RANDOM变量表示调取一个随机数(范围0~32767),这里把它对1000进行取余操作。此脚本可以让用户与程序互动,最终得出正确的随机数,执行结果如下:

    3.4 case条件测试语句

    语法结构:

    case 变量值 in
    模式 1)
    命令序列 1
    ;;
    模式 1)
    命令序列 2
    ;;
    ......
    *)
    默认命令序列
    esac

    在while循环的例子中有个缺陷,就是输入只能为数字,如果输入非数字脚本就会崩溃。这个时候就可以通过case结合通配符来解决这个问题。

    4.计划任务服务程序

    计划任务分为一次性计划任务与长期性计划任务,可以按照如下方式理解:

    一次性计划任务:今晚11点30分开启网站服务。

    长期性计划任务:每周一的凌晨3点25分把/home/wwwroot目录打包备份为backup.tar.gz

    顾名思义,一次性计划任务只执行一次,一般用于满足临时的工作需求。我们可以用at命令实现这种功能,只需要写成“at 时间”的形式就可以。如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l”命令;要想将其删除,可以用“atrm 任务序号”。在使用at命令来设置一次性计划任务时,默认采用的是交互式方法。例如,使用下述命令将系统设置为在今晚23:30分自动重启网站服务。

    如果希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务简直再适合不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。

    使用crond服务设置任务的参数格式:“分、时、日、月、星期 命令”。

    假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。我们可以使用crontab -e命令来创建计划任务。为自己创建计划任务无需使用-u参数,具体的实现效果的参数如crontab -l命令结果所示:

    需要说明的是,除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。

    如果在crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨1点钟自动清空/tmp目录内的所有文件。尤其需要注意的是,在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询,rm命令路径为下面输出信息中加粗部分。

    计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。

  • 相关阅读:
    gulp自动化压缩合并、加版本号解决方案
    利用gulp 插件gulp.spritesmith 完成小图合成精灵图,并自动输出样式文件
    gulp插件(8)
    gulp插件 run-sequence(同步执行任务)
    gulp合并压缩
    Freemarker 基础概念
    querystring模块详解
    深入理解JavaScript的闭包特性如何给循环中的对象添加事件
    堆中的路径
    公式求值
  • 原文地址:https://www.cnblogs.com/achangblog/p/8420970.html
Copyright © 2020-2023  润新知