LinuxNote 第四章 Vim编辑器与Shell命令脚本

第四章 Vim编辑器与Shell命令脚本

4.1 Vim文本编辑器

Vim 相较于 Vi,有了着色,减少了错误参数的产生;Vim 文件名 :若文件不存在会自动生成文件;

Vim编辑器有以下三种模式:
命令模式:控制光标移动,可以对文本进行复制、粘贴、删除、替换和查找等工作;也是其他两种模式切换的桥梁;
输入模式:正常的文本录入;
末行模式:保存或退出文档,已经设置编辑环境;

在这里插入图片描述
命令模式下常用命令:

命令作用
dd删除(剪切)光标所在整行
5dd删除(剪切)从光标所在行开始的5行
yy复制光标所在整行
5yy复制从光标所在行开始的5行
u撤销上一步的操作
p将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
P将之前删除(dd)或复制(yy)过的数据粘贴到光标上一行
n显示搜索命令定位到的下一个字符串(搜索可以在末行模式":/xx"开始搜索,也可以直接在命令模式"/xx"开始搜索)
N显示搜索命令定位到的上一个字符串

末行模式下常用命令:

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

4.1.1 配置主机名称

Linux中主机名称大多保存在/etc/hostname文件中

[root@localhost ~]$ vim /etc/hostname 		# 编辑当前文件修改主机名称
linuxfirstblood

[root@localhost ~]$ hostname	# RHEL8中主机名称不会立即生效,需要重启
localhost.localdomain

4.1.2 配置网卡信息

网卡的配置文件在/etc/sysconfig/network-scripts/目录中

[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens160 	


# 具体配置方法待补充
# todo:

4.1.3 配置Yum软件仓库

Yum软件仓库的配置文件在/etc/yum.repos.d/目录中

第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着软件仓库的配置文件)。
第2步:使用Vim编辑器创建一个名为rhel8.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面的配置参数并保存退出。(1-4需要配置,为RHCSA考察点)

①仓库名称:具有唯一性的标识名称,不应与其他软件仓库发生冲突。
②描述信息(name):可以是一些介绍词,易于识别软件仓库的用处。
③仓库位置(baseurl):即软件包的获取方式,可以使用FTP、HTTP与本地file。
④是否启用(enabled):设置此源是否被使用,1为使用,0为禁用。
⑤是否检查(gpgcheck):设置此源是否被校验,1为校验,0为禁用。
⑥公钥位置(gpgkey):若上面参数开启了校验功能,则此处为公钥文件位置。若没有开启,此省略不写。

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

#具体配置方法待补充
# todo:

4.2 编写Shell脚本

Shell脚本命令的工作方式有两种:
交互式(Interactive):用户没输入一条命令就立即执行;
批处理(Batch):由用户事先编辑写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多命令;

[root@localhost ~]$ echo $SHELL		# 查看默认执行脚本的终端解释器
/bin/bash

4.2.1 脚本结构

组成:声明 + 注释 + 命令
命名:Shell脚本文件的名称可以任意,但为了避免被误以为是普通文件,建议将.sh后缀加上,以表示是一个脚本文件。
执行方式:

  • 用bash解释器命令直接运行Shell脚本文件;
  • 通过输入完整路径的方式来执行。但默认会因为权限不足而提示报错信息,此时只需要为脚本文件增加执行权限即可
[root@localhost ~]$ vim test.sh
#!/bin/bash			# 声明解释器
#Test Shell script	# 注释
pwd					# 命令
ls -al | wc -l

[root@localhost ~]$ bash test.sh 	# 运行脚本
/root
36

4.2.2 接收用户参数及执行结果

$0:输出脚本名称;
$1,$3,$5:分别表示第几个输入参数(若参数不足,则会把当前为置空:a,b,);
$#:总共输入几个参数;
$*:所有位置的参数(合集)

[root@localhost ~]$ vim param.sh
#!/bin/bash
#Receive Parameters Script
echo "name: $0"
echo "count:$#, enumerate:$*"
echo "param1:$1, param3:$3"
echo "param_not_exist:$9"

[root@localhost ~]$ bash param.sh 1,2,3,4,5,6,7,8
name: param.sh
count:1, enumerate:1,2,3,4,5,6,7,8
param1:1,2,3,4,5,6,7,8, param3:
param_not_exist:

4.2.3 条件测试语句 [ xx ] 及运算符

在这里插入图片描述

条件测试语句分为四种:

  • 文件测试语句;
  • 逻辑测试语句;
  • 整数值比较语句;
  • 字符串比较语句;

测试结果返回值可以用$?接收查看

执行结果含义
0true(这个一定要注意)
非0值false

①文件测试操作符

操作符作用
-d测试文件是否为目录类型(directory)
-e测试文件是否存在(exist)
-f判断是否为一般文件(file)
-r测试当前用户是否有权限读取(read)
-w测试当前用户是否有权限写入(write)
-x测试当前用户是否有权限执行(execute)
[root@localhost ~]$ [ -d /etc/fstab ]
[root@localhost ~]$ echo $?
1

[root@localhost ~]$ [ -e /etc/fstab ] && echo "Exist"
Exist

②逻辑操作符
&&,||,!
这里要注意的是操作符可以连续使用,并且执行逻辑与java有些差异,如下:

# 逻辑操作符可以连续使用,但是并非依次向右判断执行,只有在左边的逻辑与不成立的情况下,才会执行右侧的逻辑或;
[root@localhost ~]$ [ ! $USER=root ] && echo "user" || echo "root"
root

③整数比较运算符

运算符作用
-eq等于
-ne不等于
-gt大于
-lt小于
-le小于等于
-ge大于等于
[root@localhost ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1966        1253         175          16         537         536
Swap:          2047           0        2047
#以MB为单位,获取第四行所示的内存剩余量
[root@localhost ~]$ echo `free -m | grep Mem: | awk '{print $4}'`
175

④字符串比较

运算符作用
=相同
!=不同
-z为空(可以用来判断变量是否已使用)
[root@localhost ~]$ [ -z $String ] && echo null || echo "not null"
null

[root@localhost ~]$ echo $LANG
en_US.UTF-8
[root@localhost ~]$ [ $LANG!="en_US" ] && echo "not en_US"
not en_US

4.3 流程控制语句

主要要注意写法,与java的差异;
获取用户输入参数、计算、退出脚本的命令需要学习:

read -p "Enter:" KEY	# read读取用户输入信息,-p 用来展示提示信息;最后输入值作为变量KEY
PRICE=$(expr $RANDOM%1000)	# RANDOM生成的随机数都是万位数,expr:代表计算后面的值;
							# $() 和 ` ` 都表示执行里面的命令并返回结果
exit 0		# 表示退出脚本

4.3.1 if条件测试语句

如果if xxxx ; then写到一行,要加 “;” 隔开
在这里插入图片描述

4.3.2 for条件循环语句

在这里插入图片描述

4.3.3 while条件循环语句

在这里插入图片描述

4.3.4 case条件测试语句

在这里插入图片描述

4.4 计划任务服务(定时任务)

4.4.1 单次定时任务

[root@localhost ~]$ at 21:00		# 设置单次定时任务时间
warning: commands will be executed using /bin/sh
at> reboot							# 开始输入要执行的命令
at> <EOT>							# 结束时按 ctrl + D
job 2 at Sat Jan 16 21:00:00 2021
[root@localhost ~]$ at -l			# 查看单次定时任务
2	Sat Jan 16 21:00:00 2021 a root
[root@localhost ~]$ atrm 2			# 删除定时任务

4.4.2 长期定时任务

使用到的是crond服务,设定则通过crontab配置工具;

crontab -e:编辑定时任务,会自动通过vim打开定时任务文件,即可进行编辑;
crontab -l:查看当前定时任务;
crontab -r:删除某条定时任务;
crontab -u:如果您是以管理员的身份登录的系统,可以在crontab命令中加上-u参数来编辑他人的计划任务;

编辑定时任务的格式是:(分 时 日 月 星期 + 命令),如果有些字段没有被设置,则需要使用星号(*)占位;代表着:每(某个时间)执行(某命令)
在这里插入图片描述
使用crond设置任务的参数字段说明:

字段说明
取值为0~59的整数
取值为0~23的任意整数
取值为1~31的任意整数(当月没有31日则不执行)
取值为1~12的任意整数
星期取值为0~7的任意整数,其中0与7均为星期日
命令要执行的命令或程序脚本

这里要特地强调:
命令:在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询;
②日和星期一般不同时设置,因为无法同时满足就不会执行;

# 这里的 /usr/bin/ls 就是绝对路径
[root@localhost ~]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

定时任务范例,及格式学习:

[root@localhost ~]$ crontab -e
30 2-4 * * * /usr/bin/ls 	# 每天的2、3、4点30分执行
30 */2 * * * /usr/bin/ls		# 每间隔2小时执行一次,如 0:30,2:30...
15,30,50 2 * * * /usr/bin/ls		# 每天的 2:15, 2:30, 2:50执行     

③考点:一定要检查crond服务有没有启动,若没有则启动:

[root@localhost ~]$ systemctl status crond	# 检查服务启动状态

#若没有,则重启服务并添加到开机启动
[root@localhost ~]$ systemctl restart crond
[root@localhost ~]$ systemctl enable crond
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mitays

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值