《That's how Linux should learn》—charpter4

charpter4 vim编辑器与shell命令脚本

Vim 编辑器中设置了三种模式—命令 模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手。
➢ 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
➢ 输入模式:正常的文本录入。
➢ 末行模式:保存或退出文档,以及设置编辑环境。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.1 编写简单文档

1、编写脚本文档的第一步就是给文档取个名字,vim practice.txt。存在该文档就打开,不存在就创建一个临时的输入文件。
2、使用 a、i、o 三个键从命令模式切换到输入模式。其中,a 键 与 i 键分别是在光标后面一位和光标当前位置切换到输入模式,而 o 键则是在光标的下面再 创建一个空行,此时可敲击 a 键进入到编辑器的输入模式。
3、在编写完之后,想要保存并退出,必须先敲击键盘 Esc 键从输入模式返回命令模式,然后再输入:wq!切换到末行模式才能完成保存退出操作。

配置主机名称

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

配置网卡信息

网卡 IP 地址配置的是否正确是两台服务器是否可以相互通信的前提。
配置网络服务的工作其实就是在编辑网卡配置文件。
较之以前的版本,在 RHEL 7 中,网卡配置文件的前缀则以 ifcfg 开始, 加上网卡名称共同组成了网卡配置文件名,例如 ifcfg-eno16777728;好在除了文件名变 化外也没有其他大的区别。
现在有一个名称为 ifcfg-eno16777728 的网卡设备,我们将其配置为开机自启动,并且 IP 地址、子网、网关等信息由人工指定,其步骤应该如下所示。
第一步:首先切换到/etc/sysconfig/network-scripts 目录中(存放着网卡的配置文件)。
第二步:使用 Vim 编辑器修改网卡文件 ifcfg-eno16777728,逐项写入下面的配置参数并保存退出。由于每台设备的硬件及架构是不一样的,因此请读者使用 ifconfig 命令自行确认各 自网卡的默认名称。
➢ 设备类型:TYPE=Ethernet
➢ 地址分配模式:BOOTPROTO=static
➢ 网卡名称:NAME=eno16777728
➢ 是否启动: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
执行重启网卡设备的命令,然后通过ping命令测试网络能否 连通。由于在 Linux 系统中 ping 命令不会自动终止,因此需要手动按下 Ctrl-c 键来强行结束进程。

配置Yum软件仓库

Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析 所需软件包及其依赖关系的技术。可以把 Yum想象成是一个硕大的软件仓库,里面保存有几乎所 有常用的工具,而且只需要说出所需的软件包名称,系统就会自动为您搞定一切。
第一步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。
第二步:使用 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 :若上面参数开启校验,那么请指定公钥文件地址。
第三步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab 文件中。
第四步:使用“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!则代表配置正确。
mkdir -p /media/cdrom
mount /dev/cdrom /media/cdrom
vim /etc/fstab
yum install httpd

编写shell脚本

Shell 脚本命令的工作方式有两种:交互式和批处理。
➢ 交互式(Interactive):用户每输入一条命令就立即执行。
➢ 批处理(Batch):由用户事先编写好一个完整的 Shell 脚本,Shell 会一次性执行脚本 中诸多的命令。
Shell 脚本文件的名称可以任意,但为了避免被误以为是普通文件,建议将.sh 后缀加上,以 表示是一个脚本文件。
编写脚本文件 vim example.sh
#!/bin/bash
#For Example BY linuxprobe.com
pwd
ls -al
第一行的 脚本声明(#!)用来告诉系统使用哪种 Shell 解释器来执行该脚本;第二行的注释信息(#)是对 脚本功能和某些命令的介绍信息,使得自己或他人在日后看到这个脚本内容时,可以快速知道该 脚本的作用或一些警告信息;第三、四行的可执行语句也就是我们平时执行的 Linux 命令了。
执行脚本文件 bash example.sh
第二种运行脚本程序的方法是 通过输入完整路径的方式来执行。但默认会因为权限不足而提示报错信息,此时只需要为脚 本文件增加执行权限即可(详见第 5 章)
chmod u+x example.sh
./example.sh

接收用户的参数

0 对 应 的 是 当 前 S h e l l 脚 本 程 序 的 名 称 , 0 对应的是当前 Shell 脚本程序的名称, 0Shell#对应的是总共 有几个参数, ∗ 对 应 的 是 所 有 位 置 的 参 数 值 , *对应的是所有位置的参数值, ?对应的是显示上一次命令的执行返回值,而$1、 $2、$3……则分别对应着第 N 个位置的参数值。
例如: vim example.sh
#!/bin/bash
echo “当前脚本名称为 0 " e c h o " 总 共 有 0" echo "总共有 0"echo"#个参数,分别是$*。”
echo “第 1 个参数为$1,第 5 个为$5。”
执行:sh example.sh one two three four five six
当前脚本名称为 example.sh
总共有 6 个参数,分别是 one two three four five six。
第 1 个参数为 one,第 5 个为 five。

判断用户的参数

进一步处理接收到的用户参数:Shell 脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。 切记,条件表达式两边均应有一个空格
按照测试对象来划分,条件测试语句可以分为 4 种:
➢ 文件测试语句;
➢ 逻辑测试语句;
➢ 整数值比较语句;
➢ 字符串比较语句。
在这里插入图片描述
使用文件测试语句来判断/etc/fstab 是否为一个目录类型的文件,然后通过 Shell 解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为 0,则目录存在;如果返回值为非零的值,则意味着目录不存在:
[ -d /etc/fstab ]
echo $?
在 Shell 终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令, 因此可以用来判断/dev/cdrom 文件是否存在,若存在则输出 Exist 字样。
[ -e /dev/cdrom ] && echo “Exist”
逻辑“或”,运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量 USER 来判断当前登录的用户是否为非管理员身份:
su linuxprobe
[ $USER = root ] || echo “user”
第三种逻辑语句是“非”,在 Linux 系统中的运算符号是一个叹号(!),它表示把条件测 试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的;原本测试错误的结果则将其变成正确的。
当前正在登录的即为管理员用户—root。先判断当前登录用户的 USER 变量名称是否等于 root,然后用逻辑运算符“非”进行取反操作,效果就 变成了判断当前登录的用户是否为非管理员用户了。最后若条件成立则会根据逻辑“与”运 算符输出 user 字样;或条件不满足则会通过逻辑“或”运算符输出 root 字样,而如果前面的 &&不成立才会执行后面的||符号。
[ ! $USER = root ] && echo “user” || echo “root”
在这里插入图片描述
在这里插入图片描述
例如: [ 10 -gt 10 ] 输出1
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用方法 : awk ‘{pattern + action}’ {filenames}
常见的字符串比较运算符
运算符 作用
= 比较字符串内容是否是相同
!= 比较字符串内容是否不同
-z 比较字符串内容是否为空
[ -z $String] echo $? 输出0

流程控制语句

例:我们需要批量创建 1000 位用户,首先要判断这些用户是否已经存在;若不存在,则通过循环语句让脚本自动且依次 创建他们。

if条件测试语句

if 条件语句的单分支结构由 if、then、fi 关键词组成,而且只在条件成立后才执行预设的 命令。
if 条件语句的双分支结构由 if、then、else、fi 关键词组成,它进行一次条件匹配判断, 如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令。
if 条件语句的多分支结构由 if、then、else、elif、fi 关键词组成,它进行多次条件匹配判 断,这多次判断中的任何一项在匹配成功后都会执行相应的预设命令。
脚本主要使用 ping 命令来测试与对方主机的网络联通性,而 Linux 系统中的 ping 命令不像 Windows 一样尝试 4 次就结束,因此为 了避免用户等待时间过长,需要通过-c 参数来规定尝试的次数,并使用-i 参数定义每个数据 包的发送间隔,以及使用-W 参数定义等待超时时间。
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

在 Linux 系统中,read 是用来读取用户输入信息的命令, 能够把接收到的用户输入信息赋值给后面的指定变量,-p 参数用于向用户显示一定的提示信 息
read -p "Enter your score(0-100): " GRADE

for条件循环语句

在这里插入图片描述

while条件循环语句

在这里插入图片描述

case条件测试语句

在这里插入图片描述

计划任务服务程序

计划任务分为一次性计划任务与长期性计划任务。
➢ 一次性计划任务:今晚 11 点 30 分开启网站服务。
可以用 at 命令实现一次性计划任务,只需要写成“at 时间”的形式就可以。如果想要查看已设置好但还未执 行的一次性计划任务,可以使用“at -l”命令;要想将其删除,可以用“atrm 任务序号”。在 使用 at 命令来设置一次性计划任务时,默认采用的是交互式方法。
#at 23:30
at > systemctl restart httpd
at > 此处请同时按下 Ctrl + D 组合键来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2017
难度更大但简捷性更高的方式——可以把前面学习的管道符(任意门) 放到两条命令之间,让 at 命令接收前面 echo 命令的输出信息,以达到通过非交互式的方式创 建计划一次性任务的目的。
echo “systemctl restart httpd” | at 23:30
job 4 at Mon Apr 27 23:30:00 2017

➢ 长期性计划任务:每周一的凌晨 3 点 25 分把/home/wwwroot 目录打包备份为 backup.tar.gz。
让Linux 系统能够周期性地、有规律地执行某些具体的任务,可以使用Linux系统中默认启用的crond服务,创建、编辑计划任务的命令为“crontab -e”,查看 当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是 以管理员的身份登录的系统,还可以在 crontab 命令中加上-u参数来编辑他人的计划任务。
在这里插入图片描述
分 时 日 月 星期 命令,有些字段没有设置,需要使用星号占位。
在这里插入图片描述
逗号(,)来分别表示多个时间段,如“8,9,12”表示 8 月、9 月 和 12 月。减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”, 则表示每月的 12~15 日)。
除号(/)表示执行任务的间隔时间(例如“
/2”表示每隔 2 分钟执行一次任务)
在 crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。
在 crond 服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如 果不知道绝对路径,请用 whereis命令进行查询,rm命令路径为下面输出信息中加粗部分。
whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
查看当前计划任务:crontab -l
第一个计划:25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
第二个计划:0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
注意:
➢ 在 crond 服务的配置参数中,可以像 Shell 脚本那样以#号开头写上注释信息,这样 在日后回顾这段命令代码时可以快速了解其功能、需求以及编写人员等重要信息。
➢ 计划任务中的“分”字段必须有数值,绝对不能为空或是
号,而“日”和“星期”字 段不能同时使用,否则就会发生冲突。*

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值