2021-10-16

vim编辑器

1.1.vim文本编辑器

vi与vim主要区别在于vim着色功能。
Vim编辑器中设置了3种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键
命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
输入模式:正常的文本录入。
末行模式:保存或退出文档,以及设置编辑环境。
在这里插入图片描述命令模式中最常用的一些命令
命令 作用
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.2编写文档

给文档取名字 vim test1.txt,如果存在该文档,则是打开它。如果不存在,则是创建一个临时的输入文件
默认进入的是Vim编辑器的命令模式。此时只能执行该模式下的命令,可以分别使用a、i、o三个键从命令模式切换到输入模式,进入编辑模式即可随意输入内容
保存。要想保存并退出,必须先敲击键盘的Esc键从输入模式返回命令模式,在输入:wq!,如果输入q!则会强制退出,不会保存数据

1.3配置主机名称

在Linux系统中,主机名大多保存在/etc/hostname文件中,修改主机名步骤如下
第1步:使用Vim编辑器修改/etc/hostname主机名称文件。
vim /etc/hostname
第2步:把原始主机名称删除后追加“linuxprobe.com”。
linuxprobe.com
第3步:保存并退出文档,然后使用hostname命令检查是否修改成功。
:wq!

1.4 配置网卡信息

配置网络服务的工作其实就是在编辑网卡配置文件。
在RHEL 5、RHEL 6中,网卡配置文件的前缀为eth,第1块网卡为eth0,第2块网卡为eth1;以此类推。在RHEL 7中,网卡配置文件的前缀则以ifcfg开始,再加上网卡名称共同组成了网卡配置文件的名字,例如ifcfg-eno16777736。而在RHEL 8中,网卡配置文件的前缀依然为ifcfg,区别是网卡名称改成了类似于ens160
举例:现在有一个名称为ifcfg-ens160的网卡设备,将其配置为开机自启动,并且IP地址、子网、网关等信息由人工指定,其步骤如下所示。
第1步:首先切换到/etc/sysconfig/network-scripts目录中(存放着网卡的配置文件)。
cd /etc/sysconfig/network-scripts
第2步:使用Vim编辑器修改网卡文件ifcfg-ens160,逐项写入下面的配置参数并保存退出。

vim ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
ONBOOT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=192.168.10.1
:wq!

第3步:重启网络服务并测试网络是否连通。

1.5配置软件仓库

软件仓库是一种能进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术,里面保存有几乎所有常用的工具,既然要使用软件仓库,就要先把它搭建起来,然后将其配置规则确定好
Yum与DNF软件仓库的配置文件是通用的,也就是说填写好配置文件信息后,这两个软件仓库的命令都是可以正常使用。建议在RHEL 8中使用dnf作为软件的安装命令,因为它具备更高的效率,而且支持多线程同时安装软件。
搭建并配置软件仓库的大致步骤
第1步:进入/etc/yum.repos.d/目录中(因为该目录存放着软件仓库的配置文件)。
cd /etc/yum.repos.d
第2步:使用Vim编辑器创建一个名为rhel8.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面的配置参数并保存退出。

[root@linuxprobe yum.repos.d]# vim rhel8.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0

第3步:按配置参数中所填写的仓库位置挂载光盘,并把光盘挂载信息写入/etc/fstab文件中。
mkdir -p /media/cdrom
mount /dev/cdrom /media/cdrom
第4步:使用“dnf install httpd -y”命令检查软件仓库是否已经可用。
dnf install httpd -y

2.编写shell脚本

shell作为用户与Linux系统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。
Shell脚本命令的工作方式有下面两种。
交互式(Interactive):用户每输入一条命令就立即执行。
批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。

2.1编写shell脚本

使用Vim编辑器把Linux命令按照顺序依次写入到一个文件中,就是一个shell脚本
Shell脚本文件的名称可以任意,但为了避免被误以为是普通文件,建议将.sh后缀加上,以表示是一个脚本文件。
shell脚本中实际上出现了3种不同的元素:第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行该脚本;第二行的注释信息(#)是对脚本功能和某些命令的介绍信息,使得自己或他人在日后看到这个脚本内容时,可以快速知道该脚本的作用或一些警告信息;第三、四行的可执行语句也就是我们平时执行的Linux命令了。
注意:
#! /bin/bash 指明解释器,不加此行需要在执行的时候显形指示解释器 bash adhoc.sh 如果加了此行,可以直接使用./adhoc.sh执行

[root@linuxprobe ~]# vim example.sh
#!/bin/bash 
#For Example BY linuxprobe.com 
pwd 
ls -al[root@linuxprobe ~]# vim example.sh
#!/bin/bash 
#For Example BY linuxprobe.com 
pwd 
ls -al

2.2接收用户的参数

为了让Shell脚本程序更好地满足用户的一些实时需求,以便灵活完成工作,必须要让脚本程序能够像之前执行命令时那样,接收用户输入的参数。
Shell已经内设了用于接收参数的变量,变量之间使用空格间隔。例如,$0对应的是当前Shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1、$2、$3……则分别对应着第N个位置的参数值
在这里插入图片描述

[root@linuxprobe ~]# vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"
[root@linuxprobe ~]# bash example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six。
第1个参数为one,第5个为five。

shell常用变量
1.$0 程序名称 //example.sh
2.$# 参数个数 //6
3.$* 全部参数 //one two three four five six
4.$1,$3 //第1个,第3个参数,注意中间分隔符

2.3 判断用户的参数

条件测试语句可以分为4种:
文件测试语句;
逻辑测试语句;
整数值比较语句;
字符串比较语句。
1.文件测试所用的参数
操作符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;如果返回值为非零的值,则意味着它不是目录,或这个目录不存在:

[root@linuxprobe ~]# [ -d /etc/fstab ]
[root@linuxprobe ~]# echo $?
1

[ -e /etc/fstab ] //判断文件是否存在,注意两边需要有一个空格
echo $? //0代表判断成立,!0代表判断失败

逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。
逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令,因此可以用来判断/dev/cdrom文件是否存在,若存在则输出Exist字样。

[root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist

逻辑“或”,它在Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录的用户是否为非管理员身份:

[root@linuxprobe ~]# echo $USER
root
[root@linuxprobe ~]# [ $USER = root ] || echo "user"
[root@linuxprobe ~]# su - linuxprobe 
[linuxprobe@linuxprobe ~]$ [ $USER = root ] || echo "user"
user

逻辑非,在Linux系统中的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值。注意!的位置

[linuxprobe@linuxprobe ~]$ exit
logout
[root@linuxprobe ~]# [ ! $USER = root ] || echo "administrator"
administrator

总结:
在这里插入图片描述
整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作
可用的整数比较运算符

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

[ $FreeMem -lt 1024 ] && echo "Insufficient Memory" || echo "not "

字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值)
常见的字符串比较运算符

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

[root@linuxprobe ~]# [ -z $String ]
[root@linuxprobe ~]# echo $?
0  //没有被使用输出0

4.流程控制语句

if、for、while、case4种流程控制语句

4.1if条件测试语句

if条件测试语句可以让脚本根据实际情况自动执行相应的命令。从技术角度来讲,if语句分为单分支结构、双分支结构、多分支结构
if条件语句的单分支结构由if、then、fi关键词组成,而且只在条件成立后才执行预设的命令

4.1单分支的if语句

单分支的if语句属于最简单的一种条件判断结构
在这里插入图片描述
//如果不存在该目录,则创建这个目录

[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -d $DIR ]
then    
        mkdir -p $DIR
fi 

4.2.双分支结构

if条件语句的双分支结构由if、then、else、fi关键词组成,它进行一次条件匹配判断,如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令
在这里插入图片描述
//验证某台主机是否在线,然后根据返回值的结果,要么显示主机在线信息,要么显示主机不在线信息

[root@linuxprobe ~]# 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

4.3.多分支结构

if条件语句的多分支结构由if、then、else、elif、fi关键词组成,它进行多次条件匹配判断,这多次判断中的任何一项在匹配成功后都会执行相应的预设命令在这里插入图片描述
//判断用户输入的分数在哪个成绩区间内,并输出提示信息

[root@linuxprobe ~]# 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 ~]# 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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值