linux编辑器Vim与Shell脚本、流程控制语句与计划任务程序Crond
一、Vim文本编辑器
是vi编辑器的提升版本,最大的改进当属添加代码着色的功能,在某些场景能够自动修正错误代码。同时vim编辑器设置了三种模式:命令模式、末行模式、编辑模式。每种模式都支持不同的命令快捷键。
命令模式:控制光标移动,对文本进行复制、粘贴、删除和查找
输入模式:正常的文本输入,i键进入光标当前位置、a键进入光标后一位、o键在光标的下面再建一空行
末行模式:保存或退出,设置编辑环境
1、配置主机名称
主机之间可以通过类似于域名的名称来互相访问,主机名大多保存在/etc/hostname,通过vim编辑器修改文件,可以使用hostname检查是否修改成功。
2、配置网卡信息
网卡ip地址配置的是否正确是两台服务器可以相互通信的前提,配置网络服务就是编辑网卡配置文件。网卡配置文件存放在/etc/sysconfig/network-scripts中,文件为ifcfg-nes160。使用vim编辑器修改网卡文件,参数分别为:
设备类型:TYPE=Ethernet
地址分配模式:BOOTPROTO=static
网卡名称:NAME=ens160
是否启动:ONBOOT=yes
IP地址:IPADDR=192.168.10.10
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=192.168.10.1
DNS地址:DNS1=192.168.10.1
修改保存后,重启网卡设备
nmcli connection reload ens160
3、配置软件仓库
YUM与DNF软件仓库的配置文件是通用的,建议在rhel8中使用dnf,因为它更高效,支持多线程安装软件。在/etc/yum.repos.d/中配置文件,步骤为:
[root@linuxprobe ~]# cd /etc/yum.repos.d/
[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
仓库名称:具有唯一性的标识名称,不应与其他软件仓库发生冲突。
描述信息(name):可以是一些介绍性的词,易于识别软件仓库的用处。
仓库位置(baseurl):软件包的获取方式,可以使用FTP或HTTP下载,也可以是本地的文件(需要在后面添加file参数)。
是否启用(enabled):设置此源是否可用;1为可用,0为禁用。
是否校验(gpgcheck):设置此源是否校验文件;1为校验,0为不校验。
公钥位置(gpgkey):若上面的参数开启了校验功能,则此处为公钥文件位置。若没有开启,则省略不写。
按配置参数中所填写的仓库位置挂载光盘,并把光盘挂载信息写入/etc/fstab文件中
[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /media/cdrom: WARNING: device write-protected, mounted read-only.
[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0
尝试使用软件仓库的dnf命令来安装Web服务,软件包名称为httpd,安装后出现“Complete!”则代表配置正确:
[root@linuxprobe ~]# dnf install httpd -y
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
AppStream 3.1 MB/s | 3.2 kB 00:00
BaseOS 2.7 MB/s | 2.7 kB 00:00
Dependencies resolved.
………………省略部分输出信息………………
Installed:
httpd-2.4.37-10.module+el8+2764+7127e69e.x86_64
apr-util-bdb-1.6.1-6.el8.x86_64
apr-util-openssl-1.6.1-6.el8.x86_64
apr-1.6.3-9.el8.x86_64
apr-util-1.6.1-6.el8.x86_64
httpd-filesystem-2.4.37-10.module+el8+2764+7127e69e.noarch
httpd-tools-2.4.37-10.module+el8+2764+7127e69e.x86_64
mod_http2-1.11.3-1.module+el8+2443+605475b7.x86_64
redhat-logos-httpd-80.7-1.el8.noarch
Complete!
二、编写Shell脚本
Shell脚本命令工作方式有以下两种:
交互式:用户输入一条命令就立即执行;
批处理:由用户事先编写一个完整的shell脚本,Shell会一次性执行脚本中诸多命令。
Shell脚本格式
#脚本声明(#!),告诉系统使用哪种Shell解释器来执行该脚本
#!/bin/bash
#命令....
1、接收用户参数
为了让ShellShell脚本程序更好满足客户一些实时需求,内设了用于接收参数的变量,变量之间使用空格间隔。
$0对应的是当前Shell脚本程序的名称,
$#对应的是总共有多少参数,
$对应所有位置的参数值,
$?对应上次命令的在执行返回值,
$1,$2,$3分别对应着第N个位置的参数值
2、判断用户参数
为了进一步处理接收到的用户参数,需要条件测试输入信息是否有效,测试语句格式:【 条件表达式 】
注意:条件表达式两边均具有一个空格
按照测试对象来划分,条件测试语句可分为4种:
2.1文件运算符
用指定条件判断文件是否存在或权限是否满足等情况的运算符,具体表如下所示
运算符 | 作用 |
---|---|
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
[ -d /etc/fstab ],返回值为0,则是目录
[ -f /etc/fstab ] ,返回值为0,则是一般文件
2.2逻辑运算符
用于对测试结果进行逻辑分析
逻辑“与”的运算符号是&&,前面执行成功后才会执行后面的命令
逻辑“或“”的运算符号是||,前面执行失败才会执行后面的命令
逻辑“非“”的运算符号是!,对测试结果取反值
#当前登录用户为root
[ ! $user = root ] && echo "user" || echo "root"
#执行顺序:判断当前用户为root,非逻辑取反,则逻辑与不会执行ehco "user",逻辑或执行echo "root"
2.3整数比较运算符
整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作。
运算符 | 作用 |
---|---|
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
为true,则返回值为0
为flase,则返回值为1
2.4字符串比较运算符
用于判断测试字符串是否为空值,或两个字符串是否相同。
运算符 | 作用 |
---|---|
= | 比较字符串内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
三、流程语句
为了能够根据真实工作需求调整具体的执行命令、根据某些条件实现自动循环执行,shell可以通过流程控制语句来满足上诉需求。
1、if条件测试语句
让脚本根据实际情况自动执行相应的命令。从技术角度讲,分为单分支结构、双分支结构、多分支结构。
单分支结构:
if 条件测试操作
then 命令序列
fi
双分支结构:
if 条件测试操作
then 命令序列1
else 命令序列2
fi
多分支结构:
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else 命令系列3
fi
2、for条件循环语句
允许脚本一次性读取多个信息,然后逐一对信息进行操作处理(数据有范围)
for 变量名 in 取值列表
do
命令序列
done
3、while条件循环语句
让脚本根据某些条件来重复执行命令的语句
while 条件测试操作
do
命令序列
done
4、case条件测试语句
与switch语句功能相似,在多个范围内匹配,如果匹配成功执行相关命令,不在范围内执行星号(*)中定义的默认命令
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
......
*)
默认序列
esac
四、计划任务
计划任务分为一次性计划任务与长期性计划任务
1、at
一次性计划任务只执行一次,一般用于临时的工作需求。可以用at命令实现这种功能,只需要写成“at 时间”的形式就行。如果想要查看已设置好但还未执行的一次性计划任务,可以使用at -l命令;要想将其删除,可以使用“atrm 任务序号”。
参数 | 作用 |
---|---|
-f | 指定包含命令的任务文件 |
-q | 指定新任务名称 |
-l | 显示待执行任务列表 |
-d | 删除指定待执行任务 |
-m | 任务执行后给用户发邮件 |
还有一种特殊场景,当用户激活该脚本后再开始倒计时执行。使用“at now +2 MINUTE”的方式进行操作,这表示2分钟(MINUTE)后执行这个任务,也可以将其替代成小时(HOUR)、日(DAY)、月(MONTH)等词汇:
2、crontab
Linux系统中默认启用的crond服务适合周期性的执行任务。创建、编辑计划任务的命令为crontab -e,查看当前计划任务的命令为crontab -l,删除某条计划任务的命令为crontab -r。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。
参数 | 作用 |
---|---|
-e | 编辑计划任务 |
-u | 指定用户名称 |
-l | 列出任务列表 |
-r | 删除计划任务 |
用crond服务设置任务的参数格式为 :
分、时、日、月、星期 命令
注意事项:
在crond服务的配置参数中,一般会像Shell脚本那样以#号开头写上注释信息,这样在日后回顾这段命令代码时可以快速了解其功能、需求以及编写人员等重要信息。
计划任务中的分字段必须有数值,绝对不能为空或是*号,而日和星期字段不能同时使用,否则就会发生冲突
所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询